各応答のasp.netコアアプリケーションで、コンテンツセキュリティポリシーヘッダーを追加しています。 IEの場合、ヘッダー名はX-Content-Security-Policy
であり、他のブラウザの場合はchrome its Content-Security-Policy
ヘッダー値は次のようになります。ここで、nonce
は応答ごとに異なります。
default-src 'none';
script-src 'self' 'nonce-somerandomvalue-differnt-foreach-reasone' 'unsafe-eval';
style-src 'self' 'unsafe-inline';
img-src 'self' data:;
font-src 'self';
object-src 'self';
connect-src 'self';
report-uri /csp/report;
アプリケーションは、いくつかのページでインラインJavaScriptを使用しています。したがって、インラインスクリプト違反を修正するために、スクリプトタグに同じnonce
値を追加しています。<script type="text/javascript" nonce="somerandomvalue-differnt-foreach-reasone">
ここで重要なのは、nonce値がヘッダーのnonce値と一致する必要があることです。 詳細はこちら
ヘッダーとスクリプトタグにそれぞれナンスを追加するミドルウェアとタグヘルパーを実装しました。そして、ページのレンダリング時に両方のnonce
値が一致することを確認しました。
次に、ページでテスト目的で、nonceなしでスクリプトを追加しました
<script type="text/javascript">
$(function () {
alert('i am hacker');
})
</script>
Google chromeはこの違反を検出し、上記のスクリプトを期待どおりにブロックします。ただし、IE 11では、上記のスクリプトは違反なしで実行されます。ここでも、ヘッダーを確認しました。 in IE is X-Content-Security-Policy
IE 11がスクリプトをブロックしていないのはなぜですか?
IE 11は、nonce
属性とnonce-
ソース値の使用をまったくサポートしていません。
IE11がサポートする唯一のCSPディレクティブはsandbox
ディレクティブです 。他のすべてのCSPディレクティブは無視されます。
したがって、'nonce-somerandomvalue-differnt-foreach-reasone'
ヘッダーからX-Content-Security-Policy
部分を完全に削除するだけで、IE11は引き続きインラインスクリプトを許可します。
IE11は、サーバーにX-Content-Security-Policy: sandbox
ヘッダーを付けて応答を送信させない限り、何をしてもインラインスクリプトを許可します。その場合、allスクリプト。リラックスする唯一の方法はX-Content-Security-Policy: sandbox allow-scripts
を送信することですが、これによりインラインスクリプトを含むすべてのスクリプトが許可されます。
したがって、IE11では、インラインスクリプトのみを禁止するように指示する方法はないと思います。すべてのスクリプトを許可するか、何も許可しないようにIE11に指示することしかできません。
注:IE11は、nonce
属性がどこかに指定されるずっと前の2013年にリリースされました。 nonce
属性が指定された最初のCSPドラフト仕様は、2014年のある時期だったと思います。
http://caniuse.com/#feat=contentsecuritypolicy ブラウザサポートの詳細があります CSP1ディレクティブ :
Internet Explorer 10-11での部分的なサポートとは、
X-Content-Security-Policy
ヘッダーを使用して「sandbox」ディレクティブのみをサポートするブラウザーを指します。
nonce
属性は CSP2機能 です。 http://caniuse.com/#feat=contentsecuritypolicy2 を参照してください
nonce
およびその他のCSP2機能のサポートがEdge 15で追加されました 。そのため、Edge14以前はnonce
またはその他のCSP2の新機能をサポートしていません。ただし、Edge12 +は すべてのCSP1 を完全にサポートしています。