web-dev-qa-db-ja.com

X-XSS-Protectionヘッダーを設定することをお勧めするコンテンツタイプはどれですか?

Webサーバーからのすべての応答にこのヘッダーを設定することをお勧めします(value = "1; mode = block"を考えています)。

しかし、たとえば画像を提供するときに設定することには意味がありますか? CSSファイル? AJAX呼び出しから行われたJSON応答?

XSS Auditorは、これらの応答を処理するときにこのヘッダーの存在を考慮しますか?

7
oldbam

_X-XSS-Protection_を使用する場合は、アクティブなスクリプトコンテンツを実行できるすべてのページに設定する必要があります。 CSSや画像などの非実行形式はヘッダーの影響を受けません。

SVG画像は、スクリプトコードを実行できるにもかかわらず、Chromeのヘッダーを尊重しないようです。これは、HTMLドキュメントにのみ適用されることを示唆しています。概念実証:

_<?php
header('X-XSS-Protection: 1; mode=block');
header('Content-type: image/svg+xml');
?>
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg">
<?php echo $_GET['foo']; ?>
</svg>
_

次のようにブラウザで実行します:http://localhost/xss.php?foo=<script>alert(1)</script>

私のテストでは、XSSフィルターがアクティブであるにもかかわらず、パラメーターから反映されたJSが実行されます。ただし、content-typeを_text/html_に変更すると、JSは適切にフィルタリングされます。

(また、_X-XSS-Protection_ヘッダーの使用 論争の的 であり、FacebookがXSS監査を完全に非アクティブ化することを決定した理由である新しい脆弱性をもたらす可能性があることにも注意してください。ヘッダーを設定すると、適切な出力エスケープを置き換えないでください。)

5
Arminius

このヘッダーは、Javascriptを実行できるすべてのページで意味があります。これには、HTMLファイルが含まれます。SVGやXMLも含まれますが、JavaScriptファイルやJSON応答は含まれません。ブラウザにアクセスしただけでは実行されないためです。

1
Sjoerd