我有一個文件上傳表單,需要對上傳的文件進行檢查,以確保它不是可能導致服務器問題的任何東西(即:可執行文件) 。這些文件將主要是圖像,但我將處理其他原始文件格式的擴展,這可能是許多不同的擴展。所以,我覺得最簡單的方法是檢查agaisn't我不想要的東西的清單,而不是我所做的事情。檢查上傳的文件是否屬於不安全的文件類型php
這樣做的最好方法是什麼?理想情況下,可以在Windows和Linux服務器上工作,但主要是Linux,如果兩者兼而有之。
我有一個文件上傳表單,需要對上傳的文件進行檢查,以確保它不是可能導致服務器問題的任何東西(即:可執行文件) 。這些文件將主要是圖像,但我將處理其他原始文件格式的擴展,這可能是許多不同的擴展。所以,我覺得最簡單的方法是檢查agaisn't我不想要的東西的清單,而不是我所做的事情。檢查上傳的文件是否屬於不安全的文件類型php
這樣做的最好方法是什麼?理想情況下,可以在Windows和Linux服務器上工作,但主要是Linux,如果兩者兼而有之。
我會建議您應該保留允許的類型的白名單,而不是黑名單的阻止的。雖然treat any kind of file-extension based processing as a weak line of defence,因爲它是規避這種檢查微不足道。
所以,不要只檢查文件擴展名。可能需要驗證文件的內容類型是否與擴展名匹配 - 請參閱Fileinfo擴展名。如果你只是用圖像,就可以use GD or ImageMagick to reprocess the file.
最後,我建議你存儲上的文件系統,不允許任何執行上傳的文件 - 在Linux/UNIX平臺noexec掛載 - 但要注意有isn't really an equivalent on Windows。
+1,在PHP中,內容類型和MIME類型由客戶端設置 - >爲了安全目的,不是一個很好的信息來源。 – Jacco
Fileinfo exension將實際檢查文件以獲取內容類型。它仍然不可靠,因爲它只檢查文件簽名。我同意,相信客戶端的這些數據將是一件壞事。 –
爲什麼可執行文件會成爲服務器上的風險?誰來執行它們? – JJJ
考慮到白名單通常比黑名單更安全,潛在的惡意代碼數量比圖片擴展的數量更廣泛,我強烈建議白名單。但是,我期待聽取其他意見。 – Lukx
「允許」文件列表肯定會比「不允許」更小 – 2012-05-20 20:40:42