限制網頁根目錄外的存取

  1. 網站預設根目錄 /var/www/html,限制這個目錄上層檔案的存取,可以避免攻擊存取系統檔案。直接在網址上以 ../ 連結上層目錄也無法跳脫這個目錄,但在 httpd.conf 若設定別名就可連上 /var/www/html 根目錄以外的檔案目錄,下例中 /dyw 指向 /mnt/www,也就是連線 http://kvm6.deyu.wang/dyw 時會讀取 /mnt/www 下的資料。
    [root@kvm6 ~]# grep '^Alias' /etc/httpd/conf/httpd.conf 
    Alias /dyw /mnt/www
    Alias /icons/ "/var/www/icons/"
    Alias /error/ "/var/www/error/"
    
  2. 此時的最上層目錄 / 設定並沒有限制存取。
    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>
    
  3. 建立測試目錄 /mnt/www,目錄有一網頁 c.html。
    [root@kvm6 ~]# mkdir /mnt/www 
    [root@kvm6 ~]# echo 'abc' > /mnt/www/c.html
    
  4. 連線 http://kvm6.deyu.wang/dyw/c.html,回應 c.html 內容 abc。
    [root@kvm6 ~]# /etc/init.d/httpd reload
    Reloading httpd: 
    [root@kvm6 ~]# curl -s http://kvm6.deyu.wang/dyw/c.html
    abc
    
  5. 修改 httpd.conf 限制網頁根目錄外資料的存取。
    <Directory />
        Options FollowSymLinks
        AllowOverride None
        Order Deny,Allow
        Deny from all
    </Directory>
    
  6. 重新載入 httpd.conf 參數。
    [root@kvm6 ~]# /etc/init.d/httpd reload 
    Reloading httpd:
    
  7. 再連線 http://kvm6.deyu.wang/dyw/c.html,回應 403 拒絕存取。
    [root@kvm6 ~]# curl -s http://kvm6.deyu.wang/dyw/c.html | sed -e 's/<[^>]*>//g' -e '/^$/d'
    403 Forbidden
    Forbidden
    You don't have permission to access /dyw/c.html
    on this server.