2012-01-09 50 views
2

在許多關於安全文件上傳的文章中說,最好是準備一份白名單而不是黑名單。但似乎這種方法有雙擴展文件的一些問題。例如,我有一個白名單,如'pdf','doc','docx',但是這個白名單返回爲apple.php.doc或apple.doc.php。雙擴展將繞過擴展檢查規則

如何編寫安全擴展檢查功能?

+3

「apple.php.doc」有什麼問題? – zerkms 2012-01-09 05:21:20

+1

像這樣的「雙倍延伸」會成爲一個問題?我不再使用Windows了,但是在'.doc'之前我不會想象'.php'(甚至'.exe'),這對於os或任何程序都意味着什麼。 (顯然apple.doc.php可能會出現問題。) – 2012-01-09 05:25:32

+0

所以最後的擴展應該被驗證。 – 2012-01-09 05:37:22

回答

0

你應該試着去了解其中的原因,你的問題沒有任何意義。

你不應該允許任何特定擴展名的原因是一些網絡服務器(如Apache)確定文件是基於它們的服務器的方式,當然這隻適用於他們公開服務的目錄中的文件,但大多數上傳的文件到達那裏的時間,所以當你允許服務器執行類似.php的擴展時會發生什麼,它允許網絡上的隨機用戶在你的網站上注入代碼。

對於.php.doc不會發生這種情況,因爲擴展名仍然是.doc,服務器會這樣對待它。

值得一提的是,可以將網絡服務器配置爲不在目錄內執行某些文件,但這不是默認設置,實際上很少有人這麼做。

+0

檢查雙擴展信息在這裏:www.acunetix.com/websitesecurity/ upload-forms-threat/ 將AddHandler php5-script .doc添加到httpd.conf並將file.php.doc執行 – carlos 2015-01-07 15:05:51

3

使用此代碼,以檢查是否擴展性好:

$valid_exts = array('doc', 'pdf'); 
if (in_array(pathinfo($filename, PATHINFO_EXTENSION), $valid_exts)) { 
    // everything is fine 
} else { 
    // not fine 
}