web-dev-qa-db-ja.com

HTTPヘッダー「X-Content-Type-Options:nosniff」を使用する必要がある場合

OWASP ZAP を使用していくつかの侵入テストを実行しており、すべての要求に対して次のアラートを生成します: X-Content-Type-Options Header Missing

ヘッダーと、それが推奨される理由を理解しています。 このStackOverflowの質問 で非常によく説明されています。

ただし、.jsファイルと.cssファイルにのみ使用され、実際にはbadの可能性があることを示すさまざまな参照が見つかりました他のMIMEタイプのヘッダーを設定します。

  • 注:nosniffは、「スクリプト」および「スタイル」タイプにのみ適用されます。また、画像にnosniffを適用すると、既存のWebサイトと互換性がないことが判明しました。[1]
  • Firefoxは画像のnosniffをサポートする問題に遭遇しました(Chromeはそこをサポートしていません)。[2]
  • 注:最新のブラウザーは、スクリプトやスタイルシートのヘッダーのみを尊重し、他のリソース(画像など)のヘッダーを送信するときに、間違ったメディアタイプで配信されると、古いブラウザーで問題が発生する場合があります[3]

上記の参考文献(およびその他)は、すべての応答にこのヘッダーを設定するのは悪いことを示していますが、関連性のあるリンクをたどってGoogleで検索しても、この議論の背後にある理由は見つかりませんでした。

X-Content-Type-Options: nosniffの設定に関連するリスク/問題は何ですか?text/cssおよびtext/javascript以外のMIMEタイプではなぜそれを避けるべきですか?

または、リスク/問題がない場合、Mozilla(およびその他)が存在することを示唆しているのはなぜですか?

13
HappyDog

Sean Thorburn による回答は非常に有用であり、良い資料を示してくれたので、賞金を授与されました。しかし、私はもう少し掘り下げて、必要な答えがあると思いますが、それはショーンによって与えられた答えの反対であることが判明しました。

したがって、私は自分の質問に答えます:

上記の参考文献(およびその他)は、すべての応答にこのヘッダーを設定するのは悪いことを示していますが、関連性のあるリンクをたどってGoogleで検索しても、この議論の背後にある理由は見つかりませんでした。

ここに誤解があります-これは彼らが示しているものではありません。

私が調査中に見つけたリソースは、ヘッダーが「スクリプトとスタイルの種類」のみを尊重していることを示していました。これは、text/javascriptまたはtext/cssとして提供されるファイルを意味すると解釈しました。

しかし、彼らが実際に言及しているのは、ファイルがロードされるコンテキストであり、ファイルが提供されているMIMEタイプではありません。たとえば、<script>または<link rel="stylesheet">タグ。

この解釈を考えると、すべてがより理にかなっており、答えが明確になります。

ユーザーコンテンツからのインジェクション攻撃のリスクを減らすには、nosniffヘッダーを持つallファイルを提供する必要があります。

このヘッダーを使用してCSS/JSファイルのみを提供するのは無意味です。これらの種類のファイルはこのコンテキストでは受け入れられ、追加のスニッフィングは必要ありません。

ただし、他の種類のファイルでは、スニッフィングを許可しないことにより、MIMEタイプが期待されるタイプと一致するファイルのみが各コンテキストで許可されるようにします。これにより、アップロードチェックをバイパスし、サードパーティのスクリプトをドメインからホストしてサイトに埋め込むことができるように、悪意のあるスクリプトが(たとえば)画像ファイルに隠されるリスクを軽減します。

X-Content-Type-Options:nosniffの設定に関連するリスク/問題は何ですか?また、text/cssおよびtext/javascript以外のMIMEタイプについてはなぜ避けるべきですか?

または、リスク/問題がない場合、Mozilla(およびその他)が存在することを示唆しているのはなぜですか?

問題ありません。

記載されている問題は、既存のサイトとの互換性を損なうリスクに関する問題です。 Mozillaの調査では、<img>タグにnosniffオプションを強制すると、サーバーの設定ミスにより多くのサイトが破損するため、画像コンテキストではヘッダーが無視されることが示されました。

他のコンテキスト(HTMLページ、ダウンロード、フォントなど)は、スニッフィングを使用しないか、関連するリスクがないか、スニッフィングが無効になるのを防ぐ互換性の問題があります。

したがって、彼らはあなたがこのヘッダーの使用を避けるべきであることをまったく示唆していません。

ただし、彼らが話している問題は、この議論の重要な脚注になります。

nosniffヘッダーを使用している場合、正しいContent-Typeヘッダーも提供していることを確認してください!


これをもう少し完全に理解するのに役立ついくつかの参照:

  1. このヘッダーを定義するWhatWG Fetch標準
  2. ディスカッション および コードコミットwebhint.io サイトチェックツールのこのヘッダーに関連しています。
2
HappyDog

私は、js、css、text/html、json、およびxmlに固執します。

他のコンテンツタイプには、保護されたリソースによって提供される推測不可能なCSRFトークンを使用することをお勧めします。つまり、nosniffヘッダーで保護されたjsリソースを使用してトークンを生成します。

それをすべてに追加することもできますが、それは退屈なだけで、前述したように、互換性とユーザーの問題に遭遇するかもしれません。

https://www.chromium.org/Home/chromium-security/corb-for-developers

0
Sean Thorburn