2012-04-26 7 views
4

私はJavascriptからアップロードされたファイルを受け取るサーバースクリプトを持っています。ファイルのアップロードにはMIMEタイプチェックが不要ですか? (特に、Javascript File APIを使用して)?

クライアント側、(W3C File APIから)Fileオブジェクトを使用し、このラインのようなコード:

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

一つは、ファイルの種類のチェックを行うことができます。どうやら、MIME type(これはthese stringsを返します)を使用しています。

私のここでの旅行では、私はthis worthy contributorを迂回し、MIMEタイプは役に立たないと主張しました。

ファイルのアップロード状況では、MIMEタイプは実際には基本的に役に立たないので、タイプチェックはサーバー側で行う必要がありますか?

答えて

3

投稿者は正しいです。ファイルの真正性を検証するためにMIMEタイプのチェックだけに頼ることはできません。クイックルックアップにのみ便利です。たとえば、クライアント側では、ユーザーが間違ったファイルタイプを選択して時間と帯域幅を節約した場合に備えて、ファイルがサーバーに送信される前にファイルのMIMEタイプを確認できます。カンマの自由使用のための謝罪!

+0

私が心配している限り、インターネットには十分なカンマがないので、あまりにも多くの人々がこのようなrunon trainwreckの文章を書いているので、いくつかのエクストラは傷ついていません。 – Ben

+0

私はこれらの行に沿って何かを考えていましたが、もし私が孤独になっているのかどうかは分かりませんでした。だから、私の質問に対する正解は「効率性は良いが、それ以上の検証なしには役に立たない」と思われる。私は初めに疑ったものです:Pありがとうございます。 – Ben

3

投稿者すべて MIMEタイプのチェックは、クライアントまたはサーバー側では役に立ちません。

そして、ある程度彼は正しい。 MIMEタイプチェックは、常にファイルの特定の特性を盗聴することに基づいています。彼の例:PDFファイルは%PDF-1.4のようなもので始めるべきです。しかし、%PDF-1.4で始まるファイルは必ずしもPDFファイルである必要はありません。

ユーザーはすべての正しい場所にすべてのヒントを置くことができます。そのため、MIME検出器はファイルを特定の種類として検出します。特定のヒントを参照しているためです。しかし、ファイルの残りの部分は完全に異なるものになる可能性があります。あなたがそれを遠くに行くなら、それはどんなタイプのファイルを作っていますか?それはまったくバイナリな話です。最後に、ファイルがタイプXの有効なファイルであることを確認する唯一の方法は、タイプXのファイルを期待するパーサーでファイルを開いて解析しようとすることです。それがアヒルのように歩くなら、アヒルのように倒れます。

これを念頭に置いて、ファイルを解析しようとすると、MIMEタイプを盗聴するよりも優れています。サーバー側がMIMEタイプのクライアント側を盗聴するよりも優れています。どのタイプのファイルであるかについてユーザの言葉を取っているよりも。クライアントサイドのMIMEタイプスニッフィングは、すべてがクライアントサイドで起こるため、ユーザーの言葉を取ることと同じくらい信頼性がないことに注意してください。

+0

「ファイルを解析しようとしています」と言えば、そのダックネスをテストすることですか?そして、これはサーバー側で起こる必要があります、はい? – Ben

+0

"ファイルを解析する"とは*このファイルがPDFファイルであると仮定した場合、PDFリーダーで開こうとすると* PDFリーダーが "Dude、これは実際にPDFがない"それはPDFファイルではありません。他のファイルタイプについても同様です。 JPEGファイルには、JPEGアルゴリズムに使用されるデータが含まれています。それらに他のものが含まれている場合、JPEGファイルが破損しているか、破損しています。 – deceze

関連する問題