在PHP網站開發中,為了讓網站目錄文件和程序代碼的安全考慮,我們必須對某些目錄或者文件的訪問權限進行控制,來提高網站的安全,那么我們怎樣來實現這種功能呢?因此很多時候我們需要禁止服務器上某個目錄或文件被訪問,主要是對Apache的配置文件進行操作,有兩種方法。
1.修改http.conf文件
(1).打開apache配置文件httpd.conf
(2).找到
<Directory /> Options Indexes AllowOverride None Order allow,deny Allow from all </Directory>
只需要修改Options Indexes為Options None即可,注:根據PHP運行環境安裝包的不同,Options Indexes也有可能是Options Indexes FollowSymLinks,一並改為Options None即可。
Forbidden
You don’t have permission to access / on this server.
Indexes 的作用就是當該目錄下沒有 index.html 或index.php文件時,就顯示目錄結構,去掉 Indexes,Apache 就不會顯示該目錄的列表了。
Apache單個或多個目錄禁止訪問方法
這種方法通常用來禁止訪問者訪問后台管理目錄或者程序目錄,方法如下
(1).打開apache配置文件httpd.conf
(2).創建Directory塊,比如禁止訪問某個類庫目錄,可以這樣實現
<Directory /var/wwww/inc> Order Deny,Allow Deny from all </Directory>
更改為
<Directory /var/www/*/inc>
(3).重啟Apache服務器。即可。
其他說明
(1).只允許或禁止某個域名進行目錄訪問
<Directory /var/www/inc> Order Deny,Allow Deny from abc.com Allow from apache.org </Directory>
<Directory /var/www/inc> Order Deny,Allow Deny from 10.1.1.2 Allow from 192.168.1.0/255.255.255.0 </Directory>
注意
:Allow from 192.168.1.0/255.255.255.0等同於Allow from 192.168.1或Allow from 192.168.1.0/24上述代碼實現禁止IP10.1.1.2訪問inc目錄,允許IP192.168.1子網中的主機訪問
inc目錄的功能。
2.添加.htaccess文件
上面那種方法在我的Mac下好像實現起來有問題,修改了httpd.conf文件之后重啟Apache,無法訪問任何本地網站鏈接了,應該還是修改有問題,還沒摸索出來。之后便使用了另外一個方法,其實我感覺這個方法更方便。如果只是想禁止某一個目錄或某個目錄下的文件,只需要在該目錄下新建一個.htaccess文件,然后輸入一些配置信息即可。
先說明一下什么是.htaccess文件,.htaccess是一個純文本文件,它里面存放着Apache服務器配置相關的指令。.htaccess主要的作用有:URL重寫、自定義錯誤頁面、MIME類型配置以及訪問權限控制等。主要體現在偽靜態的應用、圖片防盜鏈、自定義404錯誤頁面、阻止/允許特定IP/IP段、目錄瀏覽與主頁、禁止訪問指定文件類型、文件密碼保護等。.htaccess的用途范圍主要針對當前目錄。
這里我們就關注使用.htaccess文件來限制訪問某個目錄或該目錄下的文件。
(1).在進行.htaccess文件配置之前,需要先確定httpd.conf文件是否配置了允許.htaccess文件的作用。因為要使 apache 能夠正常的讀取.htaccess 文件的內容,就必須對.htaccess 所在目錄進行配置。
從安全性考慮,根目錄的AllowOverride屬性一般都配置成不允許任何Override,即:
< Directory /> AllowOverride None < /Directory>
在我本機Mac電腦上,由於使用1中的方法新增<Directory></Directory>導致錯誤,不知什么原因,應該是我還沒搞明白。因此我就修改了其原有的一個<Directory></Directory>,如下圖所示,將AllowOverride none 改為了 AllowOverride All,出於安全性考慮最好是想在哪個目錄下添加.htaccess文件就增加一個<Directory></Directory>,並配置目錄路徑,添加AllowOverride All。(這個還需后續摸索成功)在 AllowOverride 設置為 None 時,.htaccess 文件將被完全忽略。當此指令設置為 All 時,所有具有 “.htaccess” 作用域的指令都允許出現在 .htaccess 文件中。
還需要注明的是,在購買的阿里虛擬主機上,好像不必對httpd.conf進行配置,.htaccess文件即可生效?
(2).對httpd.conf配置完之后,便可以在需要設置訪問權限的目錄下新建一個.htaccess文件,添加相關的配置代碼即可。比如如果想禁止所在目錄以及其目錄下的所有文件訪問。可進行如下配置:
order allow,deny deny from all
如果只是想禁止所在目錄下的特定格式的文件可進行如下配置:
<Files ~ "\.(pdf|psd|zip|rar)$"> Order allow,deny Deny from all </Files>
輸入Files后的波浪線表示啟用“正則表達式”,簡單的寫法有:<Files *>,表示禁止訪問該目錄下所有文件。