Subresource Integrity实际上有效吗?

时间:2018-02-13 11:07:26

标签: cdn subresource-integrity

我已决定将SRI添加到我们的CDN脚本中,但我想测试它是否有效。如果我手动更改散列,脚本仍会加载。我期待在控制台中出现某种错误代码。

例如,这是正确的哈希:

<script crossorigin="anonymous" integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ= sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ sha512-jGsMH83oKe9asCpkOVkBnUrDDTp8wl+adkB2D+//JtlxO4SrLoJdhbOysIFQJloQFD+C4Fl1rMsQZF76JjV0eQ=="
src="https://code.jquery.com/jquery-1.12.4.min.js"></script>

如果我然后将每个sha哈希中的第一个字符更改为:

<script crossorigin="anonymous" integrity="sha256-YosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ= sha384-mvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ sha512-iGsMH83oKe9asCpkOVkBnUrDDTp8wl+adkB2D+//JtlxO4SrLoJdhbOysIFQJloQFD+C4Fl1rMsQZF76JjV0eQ=="
src="https://code.jquery.com/jquery-1.12.4.min.js"></script>

我希望它会失败。但它并没有。在Firefox 58.0.2和Chrome 64.0.3282.140中进行了测试,两者都支持SRI。缓存已关闭,我可以在开发人员工具中看到每次都重新获取脚本。

我还能做些什么来验证是否正在使用SRI?我是否从根本上误解了某些事情......?

1 个答案:

答案 0 :(得分:0)

我已经用一些样式表测试了它,它似乎在那里工作,包括Firefox报告中的控制台:

  

完整性属性中的“sha384”哈希值都不匹配子资源的内容。

这样的样式表还没那么明显。我认为脚本必须存在缓存问题。