通過研究,我發現了兩種常用技術來阻止客戶端直接訪問庫使用瀏覽器:如何讓瀏覽器不在我的庫中?他們應該放在哪裏?
- 使用
.htaccess
,讓他們出來 - 定義一個常量,並把它傳遞到包含文件,那麼包含的文件檢查如果常量存在。
但是,只是將這些文件放在文檔根目錄之外似乎是明智的。這種方法有什麼問題嗎?
通過研究,我發現了兩種常用技術來阻止客戶端直接訪問庫使用瀏覽器:如何讓瀏覽器不在我的庫中?他們應該放在哪裏?
.htaccess
,讓他們出來但是,只是將這些文件放在文檔根目錄之外似乎是明智的。這種方法有什麼問題嗎?
要做的最好的事情是保持它在你的docroot之外。沒有理由將include包含在HTTP可直接訪問的地方。
一些共享的網絡主機配置不好,沒有這個選項,但大多數都是這樣做的,而且您絕對可以在您自己的服務器或VPS上選擇此選項。
要完成布拉德的答案,這裏是你如何組織你的文件夾:
/path/to/project/
public_html/
index.php
includes/
includes.php
你的Web服務器的根文件夾將public_html
。
如果您不能修改此結構,唯一可接受的方法是使用.htaccess
(或等效項)來防止includes
被公開訪問。
如果您使用Apache Web服務器,則可以拒絕訪問所有.inc.php文件。您只需將以下內容添加到Apache Vhost配置中:
<FilesMatch .inc.php>
Order allow, deny
deny from all
</FilesMatch>
您仍然可以將這些文件包含在您的php代碼中。
如果庫文件只是定義類/函數/任何內容,並且您的服務器未配置爲可以查看源代碼的方式,則無論如何都不會通過Web服務器請求腳本。話雖如此,如果你可以將它們存儲在文檔根目錄之外。
這將使方法2不必要。 – Blake 2012-08-12 18:28:35
完全沒有任何性能問題。正如@Blake所說,'.htaccess'文件並不重要,因爲服務器無論如何都無法訪問該文件夾。 Web服務器不知道或關心PHP獲取它的內容......這取決於PHP配置。 Web服務器只知道其文檔根目錄中的內容。 – Brad 2012-08-12 18:51:37