18

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

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

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

我以为我记得有关此的规范,但一直找不到。

4

2 回答 2

20

这个特性是由 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">

Content Security Policy Level 2有一个表面上类似的功能,但它只限制 inline<script><style>elements 的内容,而不限制外部的内容。

于 2015-03-26T03:47:45.120 回答
0

根据 Mozilla 开发人员网络文档,它看起来不受支持:

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

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

于 2015-03-26T03:38:29.013 回答