3

フローは次のとおりです。

  • ユーザーがクライアントで画像を選択します。
  • ファイル名、コンテンツ タイプ、およびサイズのみがサーバーに送信されます。(例: "file.png"、"image/png"、"123123")
  • 応答は、S3 に直接アップロードするためのフィールドとポリシーです。(例: "key: xxx, "alc": ...)

「file.pdf」の拡張子を「file.png」に変更してアップロードすると、S3 にアップロードする前にサーバーに送信されるデータは次のようになります。

  • 「ファイル.png」
  • 「画像/png」

サーバーは「OK」と言って、アップロード用の S3 フィールドを返します。

しかし、送信されたコンテンツ タイプは実際のコンテンツ タイプではありません。しかし、サーバー上でこれを検証するにはどうすればよいですか?

ありがとう!


例:

Redactorjs サーバー側コード ( https://github.com/dybskiy/redactor-js/blob/master/demo/scripts/image_upload.php ) をテストすると、ファイルのコンテンツ タイプがチェックされます。しかし、偽の画像をアップロードしようとすると (ここでテスト: http://imperavi.com/redactor/ )、偽の画像は許可されません。私が望むように!

しかし、それはどのように可能ですか?リクエストパラメータを見てください: (有効なはずの画像/jpegとして送信されます)

ここに画像の説明を入力

4

2 に答える 2

0

古いブラウザでは、ファイルの内容やその名前以外のメタデータにアクセスする方法がないため、何もできません。

HTML5 ファイル API を使用すると、より適切に実行できます。例えば、

document.getElementById("uploadInput").files[0].type

最初のファイルの MIME タイプを返します。この識別を実行するために使用される方法が標準によって義務付けられているとは思いません。

これが不十分な場合は、FileReader API を使用してファイルをローカルで読み取り、必要なテストを実行できます。これは、さまざまなファイル形式の先頭にあるマジック バイトをチェックして、ファイルが関連する仕様に準拠していることを完全に検証するのと同じくらい簡単です。MDN には、これらの API のさまざまなビットの使用方法を示す素晴らしい記事があります。

最終的に、これは悪意のある試みを阻止するものではありません。

于 2013-07-25T08:26:17.213 に答える