在許多關於安全文件上傳的文章中說,最好是準備一份白名單而不是黑名單。但似乎這種方法有雙擴展文件的一些問題。例如,我有一個白名單,如'pdf','doc','docx',但是這個白名單返回爲apple.php.doc或apple.doc.php。雙擴展將繞過擴展檢查規則
如何編寫安全擴展檢查功能?
在許多關於安全文件上傳的文章中說,最好是準備一份白名單而不是黑名單。但似乎這種方法有雙擴展文件的一些問題。例如,我有一個白名單,如'pdf','doc','docx',但是這個白名單返回爲apple.php.doc或apple.doc.php。雙擴展將繞過擴展檢查規則
如何編寫安全擴展檢查功能?
你應該試着去了解其中的原因,你的問題沒有任何意義。
你不應該允許任何特定擴展名的原因是一些網絡服務器(如Apache)確定文件是基於它們的服務器的方式,當然這隻適用於他們公開服務的目錄中的文件,但大多數上傳的文件到達那裏的時間,所以當你允許服務器執行類似.php的擴展時會發生什麼,它允許網絡上的隨機用戶在你的網站上注入代碼。
對於.php.doc不會發生這種情況,因爲擴展名仍然是.doc,服務器會這樣對待它。
值得一提的是,可以將網絡服務器配置爲不在目錄內執行某些文件,但這不是默認設置,實際上很少有人這麼做。
檢查雙擴展信息在這裏:www.acunetix.com/websitesecurity/ upload-forms-threat/ 將AddHandler php5-script .doc添加到httpd.conf並將file.php.doc執行 – carlos 2015-01-07 15:05:51
使用此代碼,以檢查是否擴展性好:
$valid_exts = array('doc', 'pdf');
if (in_array(pathinfo($filename, PATHINFO_EXTENSION), $valid_exts)) {
// everything is fine
} else {
// not fine
}
「apple.php.doc」有什麼問題? – zerkms 2012-01-09 05:21:20
像這樣的「雙倍延伸」會成爲一個問題?我不再使用Windows了,但是在'.doc'之前我不會想象'.php'(甚至'.exe'),這對於os或任何程序都意味着什麼。 (顯然apple.doc.php可能會出現問題。) – 2012-01-09 05:25:32
所以最後的擴展應該被驗證。 – 2012-01-09 05:37:22