使用内容交付网络 (CDN) 来托管在多个站点之间共享的脚本和样式表等文件可以提高站点性能并节省带宽。然而,使用 CDN 也存在风险,如果攻击者获得对 CDN 的控制权,攻击者可以将任意恶意内容注入 CDN 上的文件(或完全替换文件),因此还可能攻击所有获取来自该 CDN 的文件。
子资源完整性功能使您能够降低此类攻击的风险,方法是确保您的 Web 应用程序或 Web 文档获取的文件(从 CDN 或任何地方)已经交付,而无需第三方将任何额外的内容注入到这些文件中。文件——并且根本没有对这些文件进行任何其他类型的更改。
使用子资源完整性编辑您可以通过在任何或元素
的完整性属性值中指定您告诉浏览器获取的资源(文件)的 base64 编码加密哈希来使用子资源完整性功能。<script>
<link>
完整性值至少以一个字符串开头,每个字符串都包含一个前缀,指示特定的哈希算法(当前允许的前缀是 sha256、sha384 和 sha512),后跟一个破折号,并以实际的 base64 编码哈希结尾。
一个完整性值可能包含多个由空格分隔的哈希值。如果资源与其中一个哈希值匹配,则将加载该资源。
具有 base64 编码的 sha384 哈希的示例完整性字符串:
sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC
严格来说,完整性值的“哈希”部分是通过将特定哈希函数应用于某些输入(例如,脚本或样式表文件)而形成的加密摘要。但是通常使用速记散列来表示加密摘要,所以这就是本文中使用的内容。
欲了解更多信息:链接