2012-09-25 118 views
1

我想上傳一個zip文件和HTML形式的csv文件。PHP文件上傳類型

在PHP,當我打印$ _FILES(其實$請求 - >的GetFiles()在symfony中),我有以下。

Array 
(
    [zipfile] => Array 
     (
      [name] => tempfiles.zip 
      [type] => application/octet-stream 
      [tmp_name] => C:\wamp\tmp\php5D42.tmp 
      [error] => 0 
      [size] => 850953 
     ) 
    [csvfile] => Array 
     (
      [name] => test.csv 
      [type] => application/vnd.ms-excel 
      [tmp_name] => C:\wamp\tmp\php5D52.tmp 
      [error] => 0 
      [size] => 312 
     ) 
) 

我與typetmp_name疑惑。我需要根據類型做出幾個決定。對現有類型做出決定是安全的嗎?我會得到相同的結果在Linux服務器上的類似文件?

再次tmp_name.tmp擴展。它在Windows/Linux上是否一致?如果沒有,有沒有什麼辦法,我寫在Windows上的代碼(使用type決定)將在Linux上工作沒有任何問題?

+0

非常相關的想法:與上傳安全威脅(http://stackoverflow.com/questions/ 11061355/security-threat-with-uploads /) – deceze

+0

@deceze對不起,但不相關。儘管我感謝你的好鏈接。我一定會詳細介紹他們,但我現在的代碼是用於我的網站的管理面板。因此我更關心功能性而不是安全性。安全/最佳實踐在這裏不是一個問題,但要確保它可以在Windows/Linux上運行。 –

回答

2

使用此type可能是危險的,因爲用戶可以更改文件類型,並可以上傳PHP腳本。

您應該驗證type第一就像get_image_size()來驗證圖像file.I沒有關於.zip文件

+0

感謝您的提示。如果圖像應該通過get_image_size測試,則可以通過zip_open()來測試zip文件。 –

2

相信type$_FILES是不安全的,您需要驗證服務器端的文件類型。

對於.tmp延伸,它既是在Windows或Linux確定。

+0

'tmp_name'不保證以每個系統上的'.tmp'結尾。 – deceze

+0

@deceze確實如此,不管擴展名是什麼,它都不是問題,無論如何,擴展名不應該被硬編碼。 – xdazz