2012-04-26 37 views
4

我有一個服務器腳本接收來自Javascript的上傳文件。MIME類型檢查對文件上傳無用嗎? (特別是使用Javascript File API)?

客戶端,使用File對象(從W3C File API)和代碼類似於此行:

if (file.type.indexOf("text") == 0) { ... } 

一個可以執行的文件類型的檢查。顯然,這使用MIME type(返回these strings)。

在我這裏通過SO的旅程中,我冒險通過this worthy contributor,誰認爲MIME類型是無用的。

在文件上傳情況下,MIME類型確實基本沒用,因此應該在服務器端進行任何類型檢查?

回答

3

貢獻者是正確的。您不能僅依靠MIME類型檢查來真正驗證文件。它僅用於快速查找。例如,在客戶端,可以在將文件發送到服務器之前檢查文件的MIME類型,以防用戶選擇錯誤的文件類型,從而節省時間和帶寬。道歉自由使用逗號!

+0

就我而言,互聯網上沒有足夠的逗號,所以一些附加內容不會受到傷害,因爲有太多人在寫這樣的runon trainwreck語句。 – Ben 2012-04-26 08:19:43

+0

我正在考慮這方面的內容,但並不確定我是否在那裏寂寞。所以,對於我的問題來說,正確的答案似乎是「對效率好,但沒有進一步驗證就沒用了」。這是我在開始時所懷疑的:P謝謝你。 – Ben 2012-04-26 08:21:40

3

該貢獻者認爲全部 MIME類型檢查無用,客戶端或服務器端。

在某種程度上他是對的。 MIME類型檢查總是基於嗅探文件的某些特徵。他的例子:一個PDF文件應該從%PDF-1.4開始。但是以%PDF-1.4開頭的文件不一定是PDF文件。 (簡單說明)

用戶可以將所有正確的提示放在所有正確的位置,以便MIME檢測器將文件檢測爲某種特定類型,因爲它正在查看這些特定的提示。但是,其他文件可能完全不同。如果你走得這麼遠,那麼是什麼使得一個特定類型的文件呢?這一切都只是二進制gobbledygook。最後,確保文件是X類型的有效文件的唯一方法是嘗試打開並解析期望類型爲X的文件的解析器。如果解析正確,則它是一個類型爲X的文件。如果它像鴨子一樣走路,庸醫像鴨子一樣......

考慮到這一點,試圖解析文件比嗅探MIME類型更好,服務器端比嗅探MIME類型的客戶端更好比採用用戶的話來說明它是什麼類型的文件。請注意,客戶端MIME類型嗅探與將用戶的單詞用於任何事物一樣不可靠,因爲它全部發生在客戶端。

+0

當你說「試圖解析文件」時,你的意思是測試它的鴨絨?這肯定會發生在服務器端,是嗎? – Ben 2012-04-26 08:14:46

+0

「解析一個文件」我的意思是*如果這個文件應該是一個PDF文件,讓一個PDF閱讀器試圖打開它*如果PDF閱讀器返回「Dude,這真的不是PDF在這裏」 ,那麼它不是一個PDF文件。其他文件類型也是如此。 JPEG文件應該包含用於JPEG算法的數據。如果它們包含其他任何內容,則可能是已損壞或不是JPEG文件。 – deceze 2012-04-26 08:17:50

相關問題