CSPViolationReportBody: documentURL 属性
documentURL
是 CSPViolationReportBody
接口的一个只读属性,它是一个字符串,表示违反 内容安全策略 (CSP) 的文档或 worker 的 URL。
值
一个包含违反 CSP 的文档或 worker 的 URL 的字符串。
示例
CSP 内联脚本违规显示引荐来源
此示例使用内联脚本触发 CSP 违规,并使用 ReportingObserver
报告违规。我们从另一个页面导航到该页面,并记录 referrer
、documentURL
和 blockedURL
。
HTML
首先,我们定义我们的引荐来源页面 /bounce/index.html
。此页面仅包含指向另一个页面 ../report_sample/index.html
的链接。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
</head>
<body>
<ul>
<li><a href="../report_sample/">report sample</a></li>
</ul>
</body>
</html>
下面定义了 ../report_sample/index.html
HTML 文件。它使用 <meta>
元素将 Content-Security-Policy
的 script-src-elem
设置为 self
,这允许从同一域加载脚本,但不允许执行内联脚本。该文档还包含一个内联脚本,这将触发 CSP 违规。
<!doctype html>
<!-- /report_sample/index.html -->
<html lang="en">
<head>
<meta
http-equiv="Content-Security-Policy"
content="script-src-elem 'self' 'report-sample'" />
<script src="main.js"></script>
</head>
<body>
<script>
const int = 4;
</script>
</body>
</html>
JavaScript (main.js)
上面的报告示例还加载了外部脚本 main.js
,如下所示。由于它是从与 HTML 相同的域加载的,因此它不会被 CSP 阻止。
脚本创建了一个新的 ReportingObserver
来观察类型为 "csp-violation"
的内容违规报告。每次调用回调函数时,我们都会获取报告数组的第一个条目的正文,并使用它将违规的 documentURL
、referrer
和 blockedURL
记录到控制台。
// main.js
const observer = new ReportingObserver(
(reports, observer) => {
console.log(`documentURL: ${reports[0].body.referrer}`);
console.log(`referrer: ${reports[0].body.referrer}`);
console.log(`blockedURL: ${reports[0].body.blockedURL}`);
},
{
types: ["csp-violation"],
buffered: true,
},
);
observer.observe();
请注意,虽然返回的数组中可能有多份报告,但为了简洁起见,我们只记录第一个元素的这些值。
结果
上面代码的控制台输出可能看起来像下面这样(网站将取决于页面如何提供服务)
documentURL: http://127.0.0.1:9999/report_sample/ referrer: http://127.0.0.1:9999/bounce/ blockedURL: inline
请注意,referrer
是我们导航的来源页面,documentURL
是发生 CSP 违规的页面,而 blockedURL
在这种情况下根本不是 URL,而是表示违规是由内联脚本引起的。
规范
规范 |
---|
内容安全策略级别 3 # dom-cspviolationreportbody-documenturl |
浏览器兼容性
加载中…