我试图通过设置 Content-Security-Policy 标头来减轻 XSS 攻击,但 Chrome 不断抛出错误:
拒绝执行内联事件处理程序,因为它违反了以下内容安全策略指令:“script-src 'self' 'nonce-Njg3MGUxNzkyMjViNDZkN2I3YTM3MDAzY2M0MjUxZGEzZmFhNDU0OGZjNDExMWU5OTVmMmMwMTg4NTA3ZmY4OQ=='”。启用内联执行需要“unsafe-inline”关键字、哈希值(“sha256-...”)或随机数(“nonce-...”)。
这是我的内容安全策略标头:
不想在我的应用程序中包含样式 src unsafe-inline,同时删除其抛出错误
httpResponse.setHeader(
"Content-Security-Policy",
"default-src 'self' 'unsafe-inline' 'unsafe-eval' data:;"
+ "style-src 'self' fonts.googleapis.com 'sha256-CwE3Bg0VYQOIdNAkbB/Btdkhul49qZuwgNCMPgNY5zw=';" + "base-uri 'self' data:;"
+ "frame-src 'self' * data:;" + "connect-src 'self' * data:;"
+ "font-src 'self' fonts.gstatic.com https://cdn.predix-ui.com data:;"
+ "frame-ancestors 'self' data:");
chain.doFilter(request, httpResponse);
此消息抱怨脚本(而非样式):
Refused to execute inline event handler
并且您插图的代码片段中没有设置
script-src
。
安排允许的类型/来源(尤其是与脚本内容相关的)来解决此问题。
错误消息包含 script-src 指令“script-src 'self' 'nonce-Njg3MGUxNzkyMjViNDZkN2I3YTM3MDAzY2M0MjUxZGEzZmFhNDU0OGZjNDExMWU5OTVmMmMwMTg4NTA3ZmY4OQ=='”,而您配置的策略中没有 script-src 指令。由于缺少它,因此应该使用默认 src 的回退,这应该允许“不安全内联”。您同时更改了策略,或者定义了多个策略。
错误消息表明存在内联事件处理程序(onclick、onchange 等)。这些可以通过 CSP 级别 3 中的哈希和“不安全哈希”来允许,但最好的解决方案是使用事件侦听器重写它们。
对于XSS,你最关心的应该是限制script-src。如果您限制 CSP 的其余部分,通过样式进行 XSS 真的很难,请参阅 https://scotthelme.co.uk/can-you-get-pwned-with-css/。