是否有任何实现或规范可以在<script>标记,这样浏览器就可以在执行之前验证是否检索到了正确的文件?类似于:
<script
src="http://cdn.example.com/jquery-2001.js"
signature="sha-256/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
></script>
动机是这样的:通常,你为网站使用的每一个额外的CDN或主机都会增加你的漏洞,增加一个可能被黑客入侵的新目标,从而危及你的网站。允许您的主要前端服务器断言这些文件的哈希或签名可以完全消除这种风险,使您在设计架构时更加灵活。您甚至可以从不受信任的对等网络请求丢失的文件。
我以为我记得关于这个的规范,但一直找不到。
此功能由W3C作为子资源完整性提出。截至2015年12月,Chrome 44和Firefox 43已经实施了此建议。
示例1<link rel="stylesheet" href="https://site53.example.net/style.css" integrity="sha256-vjnUh7+rXHH2lg/5vDY8032ftNVCIEC21vL6szrVw9M=" crossorigin="anonymous">
内容安全策略级别2中有一个表面上类似的功能,但它只限制内联<script>
和<style>
元素的内容,而不限制外部元素的内容。
根据Mozilla开发者网络文档:,它看起来不受支持
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script
然而,您总是可以通过XHR获取资源(假设配置了CORS),对其进行散列,如果它很酷,则使用eval()。然而,尽管这是一项有趣的技术练习,但似乎并不实用。