9

問題

Content-Security-Policy は、デフォルトでスクリプトとスタイルの解析をブラックリストに登録し、期待される出力のハッシュを検証するさまざまな指示に基づいて許可する必要があります。ブラウザーは、事前に一致するハッシュが与えられていない Javascript または CSS を実装できません。ハッシュが一致するコードは、通常どおり実行する必要があります。Microsoft Edge は、すべての JS/CSS ページ内ブロックを拒否しています。

  • 説明Microsoft Edge およびその他のブラウザーで、以下のライブ デモンストレーション リンクにアクセスしてください。

  • ライブデモ: http://output.jsbin.com/biqidoqebu

デモ用オリジナルソースコード

<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'sha256-JtUhvM7uQO2KX5IEGWxN+rhEyzzsyFelfO2gXvYEuWA='; script-src https://ajax.googleapis.com 'sha256-iZzrsbzuGxfOaTdnB/E6RQBssyXQRp7W8YtZD2Wg/Rc=';" />
<meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; style-src 'sha256-JtUhvM7uQO2KX5IEGWxN+rhEyzzsyFelfO2gXvYEuWA='; script-src https://ajax.googleapis.com 'sha256-iZzrsbzuGxfOaTdnB/E6RQBssyXQRp7W8YtZD2Wg/Rc=';" />
<style>#loading{color:transparent}#loading:after{color:green;content:"Style loaded."}</style>
</head>
<body>
<span id="loading">Hashes loading...</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>alert("Script loaded.")</script>
  • 予想される動作:本文が「スタイルがロードされました」に変わり、アラート ボックスが「スクリプトがロードされました」と表示され、外部 Javascript がエラーをスローしないようにする必要があります。コンソールに問題はありません。
  • 実際の動作: Body が "Hashes loading..." で動かなくなった。ハッシュは拒否され、外部 Javascript は受け入れられました。コンソールにエラーが表示されます:

CSP14304: Unknown source ‘'sha256-JtUhvM7uQO2KX5IEGWxN+rhEyzzsyFelfO2gXvYEuWA='’ for directive ‘style-src’ in - source will be ignored.

CSP14306: No sources given for directive ‘style-src’ for - this is equivalent to using ‘none’ and will prevent the downloading of all resources of this type.

CSP14304: Unknown source ‘'sha256-iZzrsbzuGxfOaTdnB/E6RQBssyXQRp7W8YtZD2Wg/Rc='’ for directive ‘script-src’ in - source will be ignored.

CSP14312: Resource violated directive ‘style-src 'sha256-JtUhvM7uQO2KX5IEGWxN+rhEyzzsyFelfO2gXvYEuWA='’ in : inline style. Resource will be blocked.

CSP14312: Resource violated directive ‘script-src LINK-REMOVED-INSUFFICIENT-REPUTATION-ON-STACKOVERFLOW-SHOULD-BE-THE-GOOGLE-API-URL 'sha256-iZzrsbzuGxfOaTdnB/E6RQBssyXQRp7W8YtZD2Wg/Rc='’ in : inline script. Resource will be blocked.

試みられた修正

  • ハッシュが正しいことを確認する:ダブルチェックされた計算はバイナリでした。それだけです。他のブラウザはそれらを受け入れています。
  • default-srcandの値をnot ではなくconnect-srcto に変更selfnone

他に試してみることが思い浮かびません。

24 時間後に更新:完全を期すために X-Content-Security-Policy を追加し、JSBin URL を更新しましたが、この特定の状況に違いはありません。

4

2 に答える 2

9

編集:これは間違っている可能性があります。上記のコメントを参照してください。

IE 11 はサポートしていませんContent-Security-Policy(のみX-Content-Security-Policy)。これは失敗して開きます。IE 12 は CSP をサポートしていますが、nonce/hash を処理しません。ヘッダーも指定'unsafe-inline'しない限り、閉じられません。Content-Security-Policy

CSP レベル 2 は、「ハッシュまたはナンスが指定されている場合は無視する」と述べてい'unsafe-inline'ます。これは下位互換性のためです。古いブラウザーは'unsafe-inline'nonces/hash ではなく grok するためです。http://www.w3.org/TR/CSP2/#directive-script-srcを参照

于 2015-07-31T08:17:08.990 に答える