在 Firefox 中使用 csp sha-256 将内联脚本列入白名单
Whitelisting inline script with csp sha-256 in firefox
我无法通过校验和获得白名单以在 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>
Content Security Policy: The page’s settings blocked the loading of a resource at self (“script-src 'sha256-076c8f1ca6979ef156b510a121b69b6265011597557ca2971db5ad5a2743545f'”). Source: var inline = 1;.
如果您更改哈希值,它将起作用,如下所示:
<!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;
时也会输出该值。
我不能完全放下这个,因为显然发生了一些奇怪和令人困惑的事情。我发现了一些有趣的事情:
- 使用适用于 Chrome 和 Firefox 的有效 sha-256。
- 将每个
+
替换为 -
,并将每个 /
替换为 _
。
瞧!您的校验和适用于 Chrome 但不适用于 Firefox。从Base64 variants来看,这种格式不无道理。
事实证明,Dartium browser 基于 Chrome 45,以“替代格式”发出校验和,这很可能就是它进入我的剪贴板的方式。
这仅适用于 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>
我无法通过校验和获得白名单以在 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>
Content Security Policy: The page’s settings blocked the loading of a resource at self (“script-src 'sha256-076c8f1ca6979ef156b510a121b69b6265011597557ca2971db5ad5a2743545f'”). Source: var inline = 1;.
如果您更改哈希值,它将起作用,如下所示:
<!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;
时也会输出该值。
我不能完全放下这个,因为显然发生了一些奇怪和令人困惑的事情。我发现了一些有趣的事情:
- 使用适用于 Chrome 和 Firefox 的有效 sha-256。
- 将每个
+
替换为-
,并将每个/
替换为_
。
瞧!您的校验和适用于 Chrome 但不适用于 Firefox。从Base64 variants来看,这种格式不无道理。
事实证明,Dartium browser 基于 Chrome 45,以“替代格式”发出校验和,这很可能就是它进入我的剪贴板的方式。
这仅适用于 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>