2012-08-12 66 views
2

通過研究,我發現了兩種常用技術來阻止客戶端直接訪問庫使用瀏覽器:如何讓瀏覽器不在我的庫中?他們應該放在哪裏?

  1. 使用.htaccess,讓他們出來
  2. 定義一個常量,並把它傳遞到包含文件,那麼包含的文件檢查如果常量存在。

但是,只是將這些文件放在文檔根目錄之外似乎是明智的。這種方法有什麼問題嗎?

回答

9

要做的最好的事情是保持它在你的docroot之外。沒有理由將include包含在HTTP可直接訪問的地方。

一些共享的網絡主機配置不好,沒有這個選項,但大多數都是這樣做的,而且您絕對可以在您自己的服務器或VPS上選擇此選項。

+0

這將使方法2不必要。 – Blake 2012-08-12 18:28:35

+1

完全沒有任何性能問題。正如@Blake所說,'.htaccess'文件並不重要,因爲服務器無論如何都無法訪問該文件夾。 Web服務器不知道或關心PHP獲取它的內容......這取決於PHP配置。 Web服務器只知道其文檔根目錄中的內容。 – Brad 2012-08-12 18:51:37

2

要完成布拉德的答案,這裏是你如何組織你的文件夾:

/path/to/project/ 
    public_html/ 
    index.php 
    includes/ 
    includes.php 

你的Web服務器的根文件夾將public_html

如果您不能修改此結構,唯一可接受的方法是使用.htaccess(或等效項)來防止includes被公開訪問。

0

如果您使用Apache Web服務器,則可以拒絕訪問所有.inc.php文件。您只需將以下內容添加到Apache Vhost配置中:

<FilesMatch .inc.php> 
    Order allow, deny 
    deny from all 
</FilesMatch> 

您仍然可以將這些文件包含在您的php代碼中。

0

如果庫文件只是定義類/函數/任何內容,並且您的服務器未配置爲可以查看源代碼的方式,則無論如何都不會通過Web服務器請求腳本。話雖如此,如果你可以將它們存儲在文檔根目錄之外。

+0

曾經被打破他們的PHP配置的主機咬傷?如果您的所有源代碼和數據庫密碼被意外丟棄到網絡中,這並不好玩。至少如果所有東西的大部分都不在Web根目錄中,則損害會被最小化。 – Brad 2012-08-12 19:13:57

+0

@Brad這將是一個服務器配置的示例,它可以查看源代碼,但無可否認,您將無法像開發人員那樣預見或控制該源代碼。是的,這將吸引。我贊同將文件存儲在文檔根目錄之外。我的觀點是,對於一個正確配置的服務器來說,只需要具有類定義代碼的庫文件就不會做任何事情,而對於這樣的庫文件,OP的技術#2將無法完成任何事情。 – JMM 2012-08-13 02:06:15