web-dev-qa-db-ja.com

コンテンツセキュリティポリシーはInternetExplorer11では機能しません

各応答の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がスクリプトをブロックしていないのはなぜですか?

5
LP13

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 を完全にサポートしています。

13
sideshowbarker