如果想让浏览器只汇报报告,不阻止任何内容,可以改用Content-Security-Policy-Report-Only头。
♦违规报告语法
该报告JSON对象包含以下数据:
blocked-uri:被阻止的违规资源
document-uri:拦截违规行为发生的页面
original-policy:Content-Security-Policy头策略的所有内容
referrer:页面的referrer
status-code:HTTP响应状态
violated-directive:违规的指令
♦违规报告例子
http://example.com/signup.html 中CSP 规定只能加载cdn.example.com的CSS样式。
Content-Security-Policy: default-src 'none'; style-src
cdn.example.com; report-uri /test/csp-report.php
signup.html中的代码类似与这样:
<!DOCTYPE html>
<html>
<head>
<title>Sign Up</title>
<link rel=""stylesheet"" href="css/style.css">
</head>
<body>
... Content ...
</body>
</html>
你能从上面的代码找出错误吗?策略是只允许加载cdn.example.com中的CSS样式。但signup.html试图加载自己域的style.css样式。这样违反了策略,浏览器会向http://example.com/test/csp-report.php发送POST请求提交报告,发送格式为JSON格式。

你从上面可以看到blocked-uri给出了详细的阻断地址http://example.com/css/style.css,但也并不是每次都是这样。比如试图从http://anothercdn.example.com/stylesheet.css 加载CSS样式时,浏览器将不会传送完整的路径,只会给出http://anothercdn.example.com/这个地址。这样做是为了防止泄漏跨域的敏感信息。