2012-05-20 62 views
1

我有一個文件上傳表單,需要對上傳的文件進行檢查,以確保它不是可能導致服務器問題的任何東西(即:可執行文件) 。這些文件將主要是圖像,但我將處理其他原始文件格式的擴展,這可能是許多不同的擴展。所以,我覺得最簡單的方法是檢查agaisn't我不想要的東西的清單,而不是我所做的事情。檢查上傳的文件是否屬於不安全的文件類型php

這樣做的最好方法是什麼?理想情況下,可以在Windows和Linux服務器上工作,但主要是Linux,如果兩者兼而有之。

+1

爲什麼可執行文件會成爲服務器上的風險?誰來執行它們? – JJJ

+1

考慮到白名單通常比黑名單更安全,潛在的惡意代碼數量比圖片擴展的數量更廣泛,我強烈建議白名單。但是,我期待聽取其他意見。 – Lukx

+0

「允許」文件列表肯定會比「不允許」更小 – 2012-05-20 20:40:42

回答

2

我會建議您應該保留允許的類型的白名單,而不是黑名單的阻止的。雖然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

+0

+1,在PHP中,內容類型和MIME類型由客戶端設置 - >爲了安全目的,不是一個很好的信息來源。 – Jacco

+0

Fileinfo exension將實際檢查文件以獲取內容類型。它仍然不可靠,因爲它只檢查文件簽名。我同意,相信客戶端的這些數據將是一件壞事。 –