2012-12-17 85 views
2

我正在製作一個網站,人們可以在其中將文件上傳到特定的子目錄。以防萬一有人能夠繞過過濾器來上傳潛在的惡意(可能是php)文件,我想知道是否有可能使惡意代碼無法訪問。我正在看2種不同的方法。使用.htaccess禁用子目錄php/access

第一個是看看是否有辦法讓它成爲你無法通過在瀏覽器中輸入文件url(www.example.com/images/blahblah.jpg)來訪問子目錄中的任何文件,但通過<img src=images/blahblah.jpg />

鏈接時,文件仍然正常顯示第二種方法可以通過.htaccess文件禁用子目錄中的php。我試過php_admin_flag engine off

php_flag engine off

RemoveHandler .php RemoveType .php php_flag engine off Options -ExecCGI

但每次嘗試要麼什麼也不做,或在目錄中禁用一切。有沒有這些不起作用的原因?什麼是禁用PHP或使用.htaccess保護目錄的最佳方法?

+1

爲什麼你不只是保護你的上傳系統,所以它不會允許文件不在白名單上傳?如果他們上傳.pl或.py會怎麼樣?你也不能限制對直接URL的訪問,同時仍然允許SRC訪問該URL,服務器沒有簡單的方法知道哪個是哪個URL。 –

+0

我通過文件擴展名和類型過濾掉文件來保護我的上傳系統,但是這對於保護網站來說是相對較新的,我儘可能保持謹慎。有沒有其他方法來保護上傳系統? – Hat

+2

在SO上發佈上傳代碼和PHP專家將有機會進行同行評審。 = O) –

回答

1

您可以將有關上傳文件的元數據保留在Db中,並將內容存儲在自定義擴展文本文件中。例如,上傳的所有內容都可以存儲爲1.ext或file.my,或者根本不存在任何擴展名。當文件被請求時,您只需讀取並轉儲其內容。添加到這將是重命名上傳的所有文件。

您還可以將原始文件保留在文檔根目錄(及其子目錄)之外,並藉助.htaccess將所有請求轉發給單個文件讓我們調用entrance.php然後,該php文件將簡單地讀取文件並轉儲其內容或發出404如果沒有找到或不允許的類型。

希望它有幫助。