web-dev-qa-db-ja.com

MIMEスニッフィング保護

知られているように、MSIEの古いバージョン(8より前)は、画像がHTMLのように見える場合、画像をHTMLとして扱うという厄介な習慣を持っています。 IE8で修正されていますが、IE7とそれ以前のものがまだたくさんあるので、これに対処する必要があります。だから問題は、与えられた次のように対処するのが最善であるということです

  1. ファイルをアップロードするPHPサイト
  2. 画像を再記録しない(つまり、ImageMagickなどは使用できません)
  3. 画像への直接アクセスを許可する必要があります
  4. 「間違った」拡張機能の使用を禁止することはできません

最初の256バイトで<(html | body | img | script | head)>のようなものをチェックすれば十分でしょうか?それを行うためのより良い方法はありますか?

9
StasM

http://www.adambarth.com/papers/2009/barth-caballero-song.pdf は、問題の優れた概要リファレンスです。画像だけでなく、txtファイルなども対象です...

5

いいえ、最初の256(または任意の数)バイトをチェックするだけでは十分ではありません

HTMLがないことを確認できたとしても(エンコードは約4Kバイトです...)(HTMLをエンコードなどで難読化するのが簡単であることを無視して)、HTMLだけが悪意のあるものではありません画像内に隠れている可能性があります(アップロードされているのは画像だと思いますか?)

たとえば、次を参照してください 破損した画像の脆弱性に関するこの質問 -バッファオーバーフローだけでなく、私の回答が [〜#〜] gifar [〜#〜] (および同様の形式)、つまり 本質的に 完全に有効なGIFであるだけでなく、有効で実行可能なJARファイルでもあります。これは、すべてのファイル形式のヘッダーがファイルの先頭にあるわけではないためです。
したがって、最初を確認することは、明確に進むべき道ではありません。

4
AviD