OWASP ZAP を使用していくつかの侵入テストを実行しており、すべての要求に対して次のアラートを生成します: X-Content-Type-Options Header Missing
。
ヘッダーと、それが推奨される理由を理解しています。 このStackOverflowの質問 で非常によく説明されています。
ただし、.jsファイルと.cssファイルにのみ使用され、実際にはbadの可能性があることを示すさまざまな参照が見つかりました他のMIMEタイプのヘッダーを設定します。
上記の参考文献(およびその他)は、すべての応答にこのヘッダーを設定するのは悪いことを示していますが、関連性のあるリンクをたどってGoogleで検索しても、この議論の背後にある理由は見つかりませんでした。
X-Content-Type-Options: nosniff
の設定に関連するリスク/問題は何ですか?text/css
およびtext/javascript
以外のMIMEタイプではなぜそれを避けるべきですか?
または、リスク/問題がない場合、Mozilla(およびその他)が存在することを示唆しているのはなぜですか?
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
ヘッダーも提供していることを確認してください!
これをもう少し完全に理解するのに役立ついくつかの参照:
私は、js、css、text/html、json、およびxmlに固執します。
他のコンテンツタイプには、保護されたリソースによって提供される推測不可能なCSRFトークンを使用することをお勧めします。つまり、nosniffヘッダーで保護されたjsリソースを使用してトークンを生成します。
それをすべてに追加することもできますが、それは退屈なだけで、前述したように、互換性とユーザーの問題に遭遇するかもしれません。
https://www.chromium.org/Home/chromium-security/corb-for-developers