在 Firefox 中使用 csp sha-256 将内联脚本列入白名单

新手上路,请多包涵

我无法通过校验和获得白名单以在 Firefox(52.0.2,Windows)中工作。根据 caniuse,Firefox 支持内容安全策略版本 2,因此应该支持校验和。

当 chrome 阻止内联脚本时,它会将所需的 sha-256 打印到控制台。将其添加到 csp 规则成功将脚本列入白名单。校验和也与在 https://report-uri.io/home/hash 计算的校验和相同

但是firefox不接受。

我注意到 MDN 文档中的示例使用 base-16 而不是 base-64 编码来校验和。 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src

但即使使用 MDN 示例,我也会得到相同的结果。 (Chrome 也拒绝使用 base-16 编码)。我在以下方面尝试了多种变体:

 <!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy"
          content="script-src 'sha256-076c8f1ca6979ef156b510a121b69b6265011597557ca2971db5ad5a2743545f'">
    <title>Hello CSP</title>
</head>
<body>
    <script type="text/javascript">var inline = 1;</script>
</body>
</html>

内容安全策略:该页面的设置阻止了自行加载资源(“script-src ‘sha256-076c8f1ca6979ef156b510a121b69b6265011597557ca2971db5ad5a2743545f’”)。来源:var inline = 1;。

原文由 mdemonic 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 461
2 个回答

如果您更改哈希值,它将起作用,如下所示:

 <!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <meta http-equiv="Content-Security-Policy"
        content="script-src 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8='">
  <title>Hello CSP</title>
</head>
<body>
  <script type="text/javascript">var inline = 1;</script>
</body>
</html>

不确定为什么您会在 Chrome 中看到您描述的行为;当我在 Chrome 中测试问题中的示例时,它会阻止脚本并发出一条错误消息,提示使用哈希值 sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8=

并且 https://report-uri.io/home/hash 在给定时也会输出该值 var inline = 1;

原文由 sideshowbarker 发布,翻译遵循 CC BY-SA 4.0 许可协议

我不能把这个完全搁置,因为显然发生了一些奇怪和令人困惑的事情。我发现了一些有趣的事情:

  • 获取适用于 Chrome 和 Firefox 的有效 sha-256。
  • 替换每个 + / - _

瞧!您有一个适用于 Chrome 但不适用于 Firefox 的校验和。从 Base64的变体 来看,这种格式不无道理。

事实证明,基于 Chrome 45 的 Dartium 浏览器 以“替代格式”发出校验和,这很可能就是它进入我的剪贴板的方式。

这仅适用于 Chrome:

 <!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'sha256-LqkgOOr2rKDFd7Yl4hZ4H8nB0Stbc-RDo573pA7E/XU='">

    <title>Hello CSP</title>

    <script type="text/javascript">alert("running");</script>
</head>
</html>

原文由 mdemonic 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题