当我使用内容安全策略时,知道它会(并且应该)阻止某些元素,有没有办法获取除这些元素之外的所有违规行为的报告?
例如,我得到了来自卡巴斯基产品插入的脚本的点击。当浏览器阻止此脚本时,这很好,我不需要报告,因为我既不能修复它,也不想更改阻止。但是当其他资源被意外阻止时(或者实际上存在安全事件),我需要报告。
有没有办法建立一个黑名单,只阻止某些资源,并创建另一个资源列表,当这些资源被阻止时应进行报告?
答案1
您可以有多个 Content-Security-Policy 标头。每个标头都将单独检查。因此,您可以使用第二个 Content-Security-Policy 标头列出黑名单资源,而无需为此标头设置 report-uri。
在第一个 Content-Security-Policy 中,允许列入黑名单的 URL,并设置 report-uri。在第二个 Content-Security-Policy 中,使用与标头 #1 相同的策略,但不将 URL 列入白名单,也不设置 report-uri。
添加一个具体示例:您想将 a.com、b.com 列入白名单,并将 x.com、y.com 列入黑名单。您将使用这两个标头
Content-Security-Policy: default-src: a.com b.com x.com y.com; report-uri /report
Content-Security-Policy: default-src: a.com b.com;
x.com 和 y.com 将被第二个标头阻止,但不会报告(无报告 uri)。除 a.com b.com x.com y.com 之外的任何内容都将被阻止并报告。