サイトにコンテンツセキュリティポリシー(CSP)を実装しています。以下は私がテストしているCSPポリシーです。動的ボタンによるコンテンツセキュリティポリシー
Content-Security-Policy: script-src 'self' 'nonce-random' 'strict-dynamic';
このサイトでは、サードパーティのjsスクリプトライブラリを使用しています。スクリプトライブラリは動的コンテンツをページに挿入します。動的コンテンツにはインラインイベントハンドラがあります。以下は、サイト+サードパーティのライブラリの動作を模倣した単純なHTMLページです。
<!DOCTYPE html>
<html>
<head>
<title>CSP Test Page</title>
<script nonce="random">
document.addEventListener('DOMContentLoaded', function (event) {
var el = document.createElement('button');
el.innerHTML = 'Click Me';
el.setAttribute('onclick', "doSomething()");
document.body.appendChild(el);
});
function doSomething() {
alert('I did something.');
}
</script>
</head>
<body>
</body>
</html>
動的に追加したボタンのインラインイベントハンドラ
はクロームコンソールで次のエラーメッセージをトリガー: ":それはコンテンツセキュリティポリシーディレクティブ以下 に違反しているため、インラインイベントハンドラを実行することを拒否script-src 'self' 'nonce-random' 'strict-dynamic' "となります。 インライン実行を有効にするには、 'unsafe-inline'キーワード ハッシュ( 'sha256 -...')またはノンス( 'nonce -...')のいずれかが必要です。
CSPの観点からこの問題を解決する方法に関する提案はありますか?インラインイベントハンドラで動的に生成されたコンテンツを追加するサードパーティライブラリのコードを変更することはできません。
https://developer.chrome.com/extensions/contentSecurityPolicy#interactionsにある「コンテンツスクリプト」(HTMLコンテンツを生成するjsスクリプトの名前)のトピックに関する追加情報があります。このページでは、コンテンツスクリプトのニュアンスについて議論しています。 – dnickels