2012-06-22 74 views
0

可能重複:
Security threats with uploadsphp上傳文件安全問題?

我允許用戶上傳圖片到我們的網站。我是否認爲我應該檢查文件.jpg/.jpeg/.gif的擴展名以及MIME類型以確保沒有上傳危險文件?

也應該在上傳時調整文件大小,以檢查它是一個實際的圖像文件,而不是重命名的exe或類似文件?例如,如果調整大小失敗,那麼它不是一個圖像文件。

有什麼其他形式的攻擊我應該防範?

編輯:圖像文件夾中還增加了一個.htaccess文件,以便PHP文件不能執行:

AddHandler cgi-script .php .php3 .php4 .phtml .pl .py .jsp .asp .htm .shtml .sh .cgi 
Options -ExecCGI 
order deny,allow 
deny from all 
+0

不依賴於用戶給你的任何東西;完全忽略並丟棄它們的文件名,包括擴展名。看看文件內容,確保它看起來像你想要的,如果可以的話,進一步消毒。然後生成您自己的安全文件名。爲了提高安全性,請考慮將其保存在網絡服務器的文檔根目錄之外,並僅通過您自己的腳本傳送文件。上面的問題 – Cheekysoft

+0

現在重新打開。 – Cheekysoft

回答

2

調整圖像的大小聽起來是個不錯的主意。不要忘記,一些真實的圖像上傳與PHP代碼只是爲了在任何本地包含漏洞中使用它們。

+0

+1將圖像的畫布數據複製到新畫布並保存是去除非圖像數據和其他stegonagraphic信息的好方法。略微調整圖像大小也是一種很好的技術,可以摧毀更多不需要的隱藏數據。 – Cheekysoft

+0

不一定,非圖像數據可能會觸發利用圖像庫代碼本身。二進制字符串方法更安全,更快速。雖然我同意,如果情況並非如此,這是一個好主意。 –

-1

你一定要檢查上載文件的MIME類型,因爲攻擊者可以有效地上傳一個名爲somethingbad.php.jpg,它將像普通的php腳本一樣執行。

+0

Mime類型由用戶設置,不可信任。完全忽視它。 – Cheekysoft

2

識別文件類型的最好方法是使用file命令行工具或任何其他工具基於相同的'magic string'數據庫原理,它知道很多很多文件的二進制簽名,並告訴你哪一個是a比賽。

這種方法的優點在於它對擴展和MIME類型操作都是免疫的,並且對用於調整文件大小的圖像操作庫的潛在攻擊是免疫的(多年來一直存在一些) 。

這種方法的缺點是它可能會在邊界情況下失敗(一般來說不是很大的驗證問題),並且您需要能夠使用這樣的工具,而這種工具可能無法用於許多共享託管服務商。好的,這裏有一個使用這種方法的PHP擴展:http://www.php.net/manual/en/intro.fileinfo.php

+0

用於提及Fileinfo擴展名的+1(在PHP 5.3中默認啓用) – andkrup

-2

上傳文件時沒有安全問題。

  1. 只要確保你只上傳的文件存儲的擴展名,對於圖像
  2. 對文件大小的上限 - 這將保護服務器免受惡意的人 發送(例如/dev/zero)至您。
  3. 提供這些文件時,請確保MIME類型適用於圖像。

其他職位是不正確

  1. 瀏覽器不會運行PHP代碼
  2. 不要相信從瀏覽器中任何東西。只需從瀏覽器獲取數據作爲建議。即您可以僞造MIME類型。