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

18 html javascript cryptography cors subresource-integrity

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

<script
  src="http://cdn.example.com/jquery-2001.js"
  signature="sha-256/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
></script>
Run Code Online (Sandbox Code Playgroud)

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

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

dus*_*uff 19

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

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

内容安全策略级别2中一个表面上类似的功能,但它只限制内联<script><style>元素的内容,而不是外部内容.