【问题标题】:How to apply hash (sha-...) or nonce to header tag HTML?如何将哈希(sha-...)或随机数应用于标题标签 HTML?
【发布时间】:2018-06-19 20:29:51
【问题描述】:
我使用以下命令创建了 Angular 2 生产版本:
ng build --prod --aot
但是在 dist 文件夹下生成的文件(例如:main.0c05c6d4245461043e3f.bundle)被 CSP 阻止,从而导致一些应用的样式没有显示出来。
我检索到的错误是:
拒绝应用内联样式,因为它违反了以下内容安全策略指令
我检查了所有组件,但没有发现任何 CSS 样式的内联调用。可能是因为第三方插件?不然呢?
但是,我还想应用哈希或随机数(根据 chrome 建议)来解决 CSP 违规问题。
怎么做?
【问题讨论】:
标签:
angular
inline
production
content-security-policy
【解决方案1】:
如果你不是,你应该使用 Chrome 的浏览器控制台来调试 CSP,它有非常详细的信息。这是一个内联样式示例:
它会告诉你违反的指令,包括完整的指令,样式在哪里(右侧的索引链接),以及你可以做些什么来修复它(在这种情况下,unsafe-inline、nonce 或一个哈希)。它甚至包括您可以使用的哈希值;如果您只说一种内联样式,您可以复制整个强大的(包括单引号)并将其包含在您的 style-src 中。
我通常不建议对内联样式使用哈希,除非您只有很少的内联样式并且您确定它们不会改变。如果您完全控制您的网站,您应该能够从代码中找到并删除它们,如果您使用某些 CMS,如 Wordpress(更糟糕的是,插件),几乎不可能找到并标记它们。
但为了安全起见,您也不应该只默认为 unsafe-inline,除非您发现完全不可能删除或散列所有内联样式。