我正在网站上实现内容安全策略(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>
动态添加的按钮上的内联事件处理程序会在Chrome控制台中触发以下错误消息:
从CSP的角度来看,有什么建议可以解决这个问题?我无法更改添加具有内联事件处理程序的动态生成内容的第三方库的代码。拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:"script-src 'self' 'nonce-random' 'strict-dynamic'"。要启用内联执行,需要使用"unsafe-inline"关键字、哈希值("sha256-...")或一次性号码("nonce-...")。