2012-02-19 122 views
3

幾年前我爲一家小公司寫了一個網站,當時我正在讀書。我意識到我的安全技能並不如他們應該得到的那樣好,最近這個網站被黑客攻擊了,並且惡意的php代碼被上傳了一個用於圖片上傳的表單。保護文件上傳

我已經轉向.NET世界,雖然我知道如何在.NET中保證文件上傳,但我真的不知道如何使用PHP來完成。很抱歉,我無法提供任何源代碼,因此我不希望任何人爲我的代碼發佈任何直接修復。

我希望有人能向我展示一種很好的服務器端分析方法,以確保上傳的$ FILES數組內容實際上是一個圖像或音頻文件,或者至少它不是一個php文件。

+0

用mime_content_type()可以檢測到文件模式類型(可靠的類型)http://php.net/manual/en/function.mime-content-type.php – 2012-02-19 23:18:04

+0

參見http:// www.php.net/manual/en/book.fileinfo.php – 2012-02-19 23:18:33

+0

@邁克爾 - 但不是足夠可靠的安全性。仍然存在內容嗅探攻擊,GIFAR攻擊等的風險。 – 2012-02-20 06:35:57

回答

7

很高興你問。這是一個棘手的問題,很少有應用程序開發人員意識到安全風險。

我會給你一個你應該採取的方法和一些閱讀以瞭解更多的總結。請確保您閱讀了額外的閱讀材料,因爲我的摘要不完整。

總結:

  1. 主機上一個單獨的域用戶上載的內容。這是你可以採取的最重要和最可靠的防禦措施。

  2. 檢查上傳文件在上傳時的MIME類型,以確保它位於安全MIME類型的白名單上。生成一個新的隨機文件名以將其保存。對於某些文件類型(例如圖像),考慮對其進行重新編碼(例如,轉換爲PNG,或使用ImageMagick將其從文件類型轉換爲相同的文件類型),因爲這可能會打敗一些攻擊。

  3. 下載/檢索文件時,請務必將Content-Type:標頭顯式設置爲安全MIME類型。還設置一個X-Content-Type-Options: nosniff標題。如果您不打算在瀏覽器中查看文件,也請發送Content-Disposition: attachment標題,以使瀏覽器將其視爲文件下載。

  4. 掃描文件上傳的病毒或惡意軟件。

閱讀:

+0

感謝您的一個很好的答案。希望我能+2它:) – havardhu 2012-02-20 18:13:00