CSP 是否仅在初始渲染期间强制执行,这意味着在您的文档加载后没有连续覆盖?这是我正在谈论的一个例子:
假设您的页面example.com
有一些 JS 接受 url 参数name
并将其呈现在页面上:
<script nonce="test123">
$(document).ready(function() {
$("#id").html(nameParameterTakenFromURLWithoutSanitation);
});
</script>
如果有人访问example.com?name=<script>alert('XSS');</script>
,根据我的测试,无论 CSP 如何,脚本仍将执行(弹出警报)。只有存在于初始服务器响应中的非法脚本才会被阻止。
我正在使用随机数的“严格”CSP 方法。这是我正在使用的政策:
object-src 'none';
script-src 'nonce-test123' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;
report-uri http://localhost:8080/csp-collector
为什么脚本没有被阻止?