2013-10-10 49 views
0

我有一個允許上傳大多數文件類型的上傳表單。 在這裏,他們是:PHP安全文件上傳

  • 圖片:JPG/JPEG/PNG/GIF ...
  • 視頻:MP4/AVI/WMV ...
  • 另一個文件:DOC/PDF/RAR/ZIP/mp3/...

對於圖像文件,我知道我可以使用PHP函數getimagesize()或其他東西來確保它是真實的圖像。但其他文件如視頻和文檔如何?這是一個真正的文件,沒有僞造擴展名?

如何做到這一點?

謝謝!我需要你的幫助。

+2

看到這樣的回答:http://stackoverflow.com/q/134833/467164 –

回答

0

每一個文件都有它自己的類型,稱爲MIME類型,以便ü可以檢查MIME類型,做這樣的一些東西:

if (mime_content_type($FILES['file']['tmp'])== "image/png")) 
{ 
// do upload 
}else{ 
die('file type not supported');} 

ü可以把所有的MIME類型到一個數組檢查與in_array功能 類型u能找到所有的MIME類型在這裏:http://www.freeformatter.com/mime-types-list.html

+2

永遠不使用'$ _FILES [ '文件'] [ '型']'任何東西!這是從客戶端發送的MIME類型,可以像文件擴展名一樣容易僞造。 – deceze

+0

so use mime_content_type –

+0

更好,但不推薦使用'mime_content_type'。 – deceze

0

任何客戶端檢查(甚至是瀏覽器的MIME類型檢測),是註定要失敗,因爲用戶可以訪問它。您最好讓上傳開始並完成,然後執行嚴重的服務器端檢查。如果這不符合您的預期,您只需放棄該文件即可。

在服務器端的頂部檢查,你當然可以實現客戶端檢查只是一個整潔的用戶體驗

-1

充分確保文件上傳的唯一方法就是嘗試用PHP解析上傳的文件或其他一些需要特定有效文件類型的擴展/工具。換句話說:

  • 圖片:使用GD函數來解析文件,如果它不是一個有效的圖像,它們將返回false。
  • 視頻:或許可以驗證使用命令行上的ffmpeg和檢查輸出,或使用ID3擴展爲這裏建議:https://stackoverflow.com/a/134893(信貸上的問題鏈接到這個問題Zathrus作家的評論)
  • 文件:嘗試加載文件與PHPExcel/Word/PowerPoint,雖然我不確定這些將支持這些文件的任何格式,因爲它在OpenXML上工作。

從查看getID3擴展,這可能是最好的選擇,因爲它似乎是解析各種各樣的內容類型。

在任何情況下,您基本上需要的是PHP或其他第三方庫/擴展程序來確定文件的二進制數據與其MIME內容類型相對應。

希望這有助於:)