我无法通过校验和在Firefox中使用白名单(52.0.2,windows). Firefox根据caniuse支持内容安全策略版本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示例,我也能得到相同的结果. (还有使用base-16编码的chrome拒绝).我尝试了以下几种变体:
<!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 =.
当给定var inline = 1时,https://report-uri.io/home/hash也输出相同的值.