5

Javascript からアップロードされたファイルを受け取るサーバー スクリプトがあります。

( W3C File APIFileからの) オブジェクトと次の行のようなコードを使用するクライアント側:

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

ファイルタイプのチェックを実行できます。どうやら、これはMIME タイプ(これはこれらの文字列を返します) を使用します。

ここまでの SO の旅で、MIME タイプは役に立たないと主張するこの価値ある貢献者に出くわしました。

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

4

2 に答える 2

4

その寄稿者は、すべてのMIME タイプ チェックは、クライアントまたはサーバー側では役に立たないと主張しています。

そしてある程度彼は正しい。MIME タイプのチェックは、常にファイルの特定の特性のスニッフィングに基づいています。彼の例: PDF ファイルは%PDF-1.4. ただし、 で始まるファイル%PDF-1.4は必ずしも PDF ファイルではありません。(簡単な説明です。)

ユーザーは適切なヒントをすべて適切な場所に配置できるため、MIME 検出器はファイルを特定の種類として検出します。これは、特定のヒントを調べているためです。ただし、ファイルの残りの部分はまったく異なるものになる可能性があります。とはいえ、そこまで行った場合、特定の種類のファイルを作成するのは何ですか? それはすべて、バイナリゴブルディグックです。最後に、ファイルがタイプ X の有効なファイルであることを確認できる唯一の方法は、タイプ X のファイルを予期するパーサーでファイルを開いて解析することです。正しく解析された場合、それはタイプ X として有用なファイルです。アヒルのように歩くなら、アヒルのように鳴く...

そのことを念頭に置いて、MIME タイプをスニッフィングするよりも、サーバー側で MIME タイプをスニッフィングするよりも、ファイルを解析しようとする方が適切です。MIME タイプをクライアント側でスニッフィングするよりも、ファイルの種類についてユーザーの言葉を受け入れるよりも優れています。クライアント側の MIME タイプのスニッフィングは、すべてクライアント側で行われるため、ユーザーの言葉を何でも受け入れるのと同じくらい信頼できないことに注意してください。

于 2012-04-26T08:12:17.323 に答える
3

貢献者は正しいです。ファイルを真に検証するために、MIME タイプのチェックだけに頼ることはできません。クイックルックアップにのみ役立ちます。たとえば、クライアント側では、ユーザーが間違ったファイル タイプを選択した場合に備えて、サーバーに送信する前にファイルの MIME タイプをチェックして、時間と帯域幅を節約できます。コンマを自由に使用して申し訳ありません。

于 2012-04-26T08:15:33.213 に答える