javascript - 为什么我的代码违反了内容安全策略?

标签 javascript google-chrome content-security-policy inline-scripting

我想使用以下机制推迟非关键 CSS:

<link rel="preload" href="styles.css" as="style" onload="this.onload=null;this.rel='stylesheet'">

我有以下内容安全策略:

Content-Security-Policy: default-src 'self'; object-src 'none'; font-src 'self'; base-uri 'self'; connect-src 'self'; manifest-src 'self'; img-src 'self'; script-src 'self' 'nonce-7cc36362-697e-4b28-bdd9-0400d8923894' 'sha256-1jAmyYXcRq6zFldLe/GCgIDJBiOONdXjTLgEFMDnDSM='; style-src 'self'; form-action 'self'; frame-ancestors 'none'; media-src 'self'; report-uri /api/cspviolation

当尝试加载和解释文档时,浏览器会阻止 onload 事件处理程序脚本的执行,因为它违反了 CSP,我不明白这一点,因为该脚本的 sha256 是在 script-src 指令中设置的。

有什么想法吗?我使用了在线 sha256 生成器来生成 CSP 中的 sha256 集。遗憾的是,Chrome 没有在控制台中为我提供它想要的 sha256,这是我以前见过的。

最佳答案

内联事件处理程序只能通过使用 CSP 级别 3 中的“不安全哈希”的哈希列入白名单,但这在浏览器中尚未得到很好的支持。检查https://www.w3.org/TR/CSP3/#unsafe-hashes-usage规范和表格见https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy以实现浏览器兼容性。

您最好的选择可能是将脚本移动到单独的文件并添加事件监听器。

关于javascript - 为什么我的代码违反了内容安全策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59106051/

相关文章:

javascript - 为什么我的动画在 Firefox 中延迟?我该如何改进这个滚动脚本?

javascript - 在 HTML5 Canvas 上绘制 X 形状并检查与边框的碰撞

google-chrome - Chrome 开发工具快捷方式会覆盖 Google 文档快捷方式

google-maps - 内容安全政策和 Google Maps API v3

javascript - 来自不同域区域的内容安全策略和 Google Analytics 图像

javascript - 从内部级别获取 JSON 对象的键

javascript - 如何在 select.options.add(new Option()) 之后添加 2 个属性

java - 如何在 Chrome 扩展中使用 GWT 获取当前页面 URL?

CSS3 悬停效果对 Chrome 中的其他元素产生奇怪的影响

javascript - Web 应用程序无法在 Edge 浏览器 41 上运行