Skip to content

静态资源完整性校验

参考答案:

使用 内容分发网络 (CDNs) 在多个站点之间共享脚本和样式表等文件可以提高站点性能并节省带宽。然而,使用CDN也存在风险,如果攻击者获得对 CDN 的控制权,则可以将任意恶意内容注入到 CDN 上的文件中 (或完全替换掉文件),因此可能潜在地攻击所有从该 CDN 获取文件的站点。


预防方案


将使用 base64 编码过后的文件哈希值写入你所引用的 <script> 或 标签的 integrity 属性值中即可启用子资源完整性能。

题目要点:

静态资源完整性校验是指通过对比资源的预期哈希值与实际下载资源的哈希值,来验证资源是否在传输过程中被篡改的一种机制。其目的在于防止CDN(内容分发网络)被劫持、中间人攻击等安全威胁,确保用户加载的是合法、未被篡改的静态资源。

1. Subresource Integrity (SRI)

SRI(子资源完整性)是一种安全特性,允许Web开发者为HTML中的外链资源(如JavaScript、CSS文件)指定一个或多个加密哈希值。浏览器在下载这些资源时,会计算资源的哈希值,并与开发者指定的哈希值进行比较。如果两者匹配,则资源被认为是完整的,可以安全使用;如果不匹配,则浏览器会拒绝加载该资源,从而防止潜在的安全风险。

2. 实现步骤

  • 计算哈希值:开发者需要使用安全的哈希算法(如SHA-256)为静态资源计算哈希值。
  • 在HTML中指定SRI:在HTML标签中,通过integrity属性添加计算得到的哈希值。例如,对于JavaScript文件,可以这样写:<script src="https://example.com/script.js" integrity="sha256-xxx..." crossorigin="anonymous"></script>
  • 浏览器验证:浏览器在加载资源时,会自动计算资源的哈希值,并与integrity属性中指定的哈希值进行比较。