内容安全策略和 slickgrid

时间:2021-02-10 16:53:04

标签: javascript content-security-policy slickgrid

我正在尝试在依赖于光滑网格 (slickgrid.js) 的项目上添加 CSP 标头。我认为以下行会导致问题:

$focusSink = $("<div tabIndex='0' hideFocus style='position:fixed;width:0;height:0;top:0;left:0;outline:0;'></div>").appendTo($container)

这是我在浏览器上遇到的错误:

Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self'

我尝试了 sha256- 但它没有帮助,因为这些是样式属性。还有其他选择吗?

1 个答案:

答案 0 :(得分:0)

要允许 style= 属性,它需要使用 'sha256-...' 和 'unsafe-hashes' 标记。 Chrome 和 Firefox 支持它,但not in Safari

因此,就目前而言,除了在 style-src 指令中使用“unsafe-inline”外,您别无选择。此外,如果使用许多不同的样式 = '...',收集它们的所有哈希值并保持最新是不现实的。

您能做的最好的事情就是这样的 CSP:

style-src 'self' 'unsafe-inline'; style-src-attr 'unsafe-inline'; style-src-elem 'self';

由于 <style>..</style> 将适用于 Chrome,因此至少 Chrome 用户将受到保护,免受 style-src-elem 'self' 的 XSS 注入。 Safari 和 Firefox 将使用 style-src 'self' 'unsafe-inline' 规则。

或者,您可以重写 JS 代码以使用 class='' 而不是 style='',或者使用不需要 Element.style.properrty = 'display:none'; 令牌的 JS 构造,例如 'unsafe-inline'