web-dev-qa-db-ja.com

アプリケーション内でユーザーがアップロードした画像を検証するには、どのような手順を踏む必要がありますか?

最近、ユーザーがアップロードした画像を処理する必要がある多くのアプリケーションに取り組み、拡張機能とMIMEタイプを検証するための手順が取られました。

しかし、画像が有効であることを確認するために他に何ができますか?

私の場合、アップロードはPHPによって処理され、次に Gd または ImageMagick に渡されます。どちらも拒否の原因となる脆弱性の影響を受けますサービスと任意のコードの実行の可能性。

特にPHPおよび一般的なWebまたは非Webアプリケーションの両方に対して、検証プロセスを改善するために人々が提供できる提案があれば、興味があります。


Area51プロポーザルに関する私の質問例から

23
Mark Davidson

簡単に聞こえるかもしれませんが、画像チェックは難しいかもしれません。少なくとも次のアクションを実行する必要があります。

  • 画像のサイズを確認-幅、高さ、およびサイズ。
  • 画像の拡張子と名前を確認してください。
  • コンテンツタイプを確認します。
  • アップロードする画像の量を制限します。
  • アップロードされた画像へのアクセスを制限する-ユーザーが画像の保存場所を知らない場合に適しています。
  • 画像拡張子の種類を制限します。
  • 画像の名前を変更してください。

また、これらのチェック後に画像のタイプを明示的に変更することをお勧めします。 PNGからJPGへ。シンプルですが、うまく機能します。

13
anonymous

これまでに提出された回答に同意しません。

あなたが提案したものなどの画像操作ライブラリを使用して、(おそらくユーザーにサイズ変更を強制することによって)画像を書き換える必要があります。

GIFAR、XSS、ファイルインクルージョンなどの脆弱性があるため、EXIFデータなどを削除するには、注意が必要です。これにより、攻撃の連鎖が可能になる可能性があります。

8
atdre

2 MBかそれを超えないようにサイズ制限を設定できます。これは、ストレージスペースを確保し、ユーザーが高解像度の画像をアップロードできないようにするのに役立ちます。

1
Jeremy