問題
Content-Security-Policy は、デフォルトでスクリプトとスタイルの解析をブラックリストに登録し、期待される出力のハッシュを検証するさまざまな指示に基づいて許可する必要があります。ブラウザーは、事前に一致するハッシュが与えられていない Javascript または CSS を実装できません。ハッシュが一致するコードは、通常どおり実行する必要があります。Microsoft Edge は、すべての JS/CSS ページ内ブロックを拒否しています。
説明Microsoft Edge およびその他のブラウザーで、以下のライブ デモンストレーション リンクにアクセスしてください。
デモ用オリジナルソースコード
<!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-src
andの値をnot ではなくconnect-src
to に変更self
none
他に試してみることが思い浮かびません。
24 時間後に更新:完全を期すために X-Content-Security-Policy を追加し、JSBin URL を更新しましたが、この特定の状況に違いはありません。