2017-02-18 108 views
0

我的網站上有一個上傳表單。實際上我並沒有真正包含或排除文件類型。網站上傳防止黑客入侵

相反,我使用的是這樣的:

$fileUploadName = $target_dir.md5(uniqid($target_file.rand(),true)).".".$imageFileType; 

這將保留該文件類型,但更改文件名隨機的一些神祕的類似790cd5a974bf570ff6a303c3dc5be90f

這樣黑客就不能上傳hack.php文件,並用www.example.com/uploaded_files/hack.php打開它,因爲它已經更改爲例如。 790cd5a974bf570ff6a303c3dc5be90f.php。在我看來,這是完全安全的。我說得對,這樣安全嗎?

我認爲只有自動執行文件可能是一個問題。自執行文件是否存在?

+0

應用[Kerckhoff的原理](https://en.wikipedia.org/wiki/Kerckhoffs 's_principle)「的攻擊者知道除(密碼)鍵以外的系統的所有信息「,攻擊者可能知道您使用了文件名的MD5校驗和,因此可以推斷上傳的文件名。 –

+0

爲什麼在任何情況下都會允許執行上傳的文件? – miken32

+0

@ miken32我不明白你的意思。當然,我想避免黑客可以上傳文件,然後執行。爲了避免這種情況,我使用md5(uniqid($ filename))來改變真正的文件名。這樣,我希望黑客不能通過瀏覽器調用和執行文件,因爲他不知道(實際)文件名。當然,如果它是一個自我執行文件,這將不起作用。但是呢。自執行文件甚至存在? – David

回答

0

您還應該檢查上傳文件的MIME類型和擴展名(儘管上傳時可能很容易僞造)。 如果你希望只圖像,你也可以通過執行這樣的腳本檢查圖像的寬度和長度參數:

$size = getimagesize($target_file); 

如果不返回正確的價值觀,這是沒有圖像文件。

你可能想告訴你自己關於像Gifar這樣的危險圖形。在有自己的文件夾一樣/etc/web/uploads/<Random>(../uploads)

+0

好的,但爲什麼我應該額外檢查?用戶將無法打電話/打開上傳的文件,或者他會? – David

+0

我會盡可能地清理每一個上傳內容。如果您期望圖像文件,我會通過使用getimagesize來檢查圖像文件。 有很多情況下,有人可以真正到達上傳的文件。例如,網絡服務器更新/配置錯誤可以啓用目錄瀏覽。 或者有人可能只是嘗試蠻力攻擊來查找服務器上的文件(因爲它們可以從網上執行)。 – Cruiser

+0

通常人們想對後來上傳的文件做些什麼。下載它們,在某處顯示它們。即使是針對文件或某種索引服務的簡單優化腳本,如果情況允許,也可以觸發這些文件並執行它。 – Cruiser

相關問題