2013-02-22 56 views
1

我有一個腳本,主要組件存儲在子文件夾中。所有組件只能從作爲控制器的index.php訪問。在考慮隱藏公共訪問/知名度的組件文件夾的方法時,我得到了2個選項:如何有效防止目錄暴力強制?

  1. 在每個目錄中使用.htaccess來傳遞403禁止的錯誤。
  2. 使用以下php腳本和一個「假」404 HTML消息在每個文件夾中放置一個index.php。

    header('HTTP/1.0 404 Not Found');

我試了兩個選項,並用OWASP ZAP掃描。對於第一個選項,可以獲得腳本的整個結構,因爲對於每個系統文件夾,403都已交付。有了第二個選項,OWASP無法給我一個腳本文件夾的列表,因爲404告訴它沒有文件夾。

現在我不知道哪種方法是最好的,htaccess會阻止所有的訪問,但假的404你甚至不能看到有一個目錄。

是否有安全的.htaccess安全工作和一個交付404的好混淆?

編輯:對不起,我忘了提及,由於服務器的限制,我不可能將組件移到可訪問的腳本路徑之外!

+3

爲什麼不把腳本移出公用文件夾? – 2013-02-22 20:17:33

+1

只使用index.php將停止顯示該目錄,但只有當它們加載目錄時纔會顯示該目錄。它不會阻止某人直接轉到該文件夾​​中的另一個腳本。 .htaccess將停止加載文件夾中的所有腳本。你可以在父目錄中使用一個.htaccess文件來阻止所有的子目錄。 – 2013-02-22 20:20:37

回答

2

PHP可以包含文檔根目錄之外的文件。

平時我有這樣的設置:

/www/application   - this is the web application root 
/www/application/includes - here you find the components 
/www/application/root  - here you place index.php 

這樣你就不需要禁止你不希望被訪問的文件。

0

對此有兩種思路。首先,如@nalply所述,僅僅是將腳本移出文檔根目錄。 PHP允許您將文件包含在服務器根目錄下,因此它們不需要與實際的公共內容一起使用。在我看來,這是最好的方式

第二種方法是使用.htaccess指令。例如,在我運行的特定站點上,我技術上無法實現第一個選項。所以,我把一個.htaccess文件中未旨在通過包含如下代碼市民被擊中的任何目錄:

deny from all 

這從撞擊目錄中的任何文件不允許瀏覽器,但你仍然可以包括這些文件通過PHP。這將是第二好的方法。

我強烈建議不要使用發送HTTP錯誤標頭的index.php文件或顯示消息。目錄中的其他文件在技術上仍然可以使用僅使用此方法。如果有人知道這些文件之一的路徑,他們將能夠訪問它們。

TL; DR在文檔根的非公共目錄發佈文件在每個目錄中使用.htaccess文件。請勿使用index.php文件來阻止目錄訪問。