从不受信任的主机指定脚本的哈希值

时间:2015-03-26 03:28:35

标签: javascript html cryptography cors subresource-integrity

是否有任何实现或规范在< script>的属性中包含哈希或签名?标记,以便浏览器可以在执行之前验证是否检索到了正确的文件?类似的东西:

<script
  src="http://cdn.example.com/jquery-2001.js"
  signature="sha-256/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
></script>

动机是这样的:通常,您为网站使用的每个额外CDN或主机都会增加您的漏洞,方法是添加一个可以入侵以破坏您网站的新目标。允许主要前端服务器断言这些文件的哈希值或签名可以完全消除这种风险,使您在设计架构时更加灵活。您甚至可以从不受信任的对等网络请求丢失的文件。

我以为我记得有关此的规范,但未能找到它。

2 个答案:

答案 0 :(得分:20)

此功能由W3C提出为Subresource Integrity。截至2015年12月,此建议已经实施by Chrome 44Firefox 43

  例1
<link rel="stylesheet" href="https://site53.example.net/style.css"
      integrity="sha256-vjnUh7+rXHH2lg/5vDY8032ftNVCIEC21vL6szrVw9M="
      crossorigin="anonymous">

a superficially similar feature in Content Security Policy Level 2,但它只限制内联<script><style>元素的内容,而不是外部元素。

答案 1 :(得分:0)

根据Mozilla Developer Network文档,它看起来不受支持:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

但是,您总是可以通过XHR获取资源(假设配置了CORS),哈希它,如果它很酷,则为eval()。然而,虽然一项有趣的技术练习似乎并不实用。