我在bootstrap的网站上,我最近注意到他们的CDN链接包含一个带有SHA-384密钥的完整性属性。
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
我认为这是一种验证脚本源的方法,但更多的是我想知道它是如何使用的,以及这是否是任何规范的一部分?
此外,这仅适用于脚本src还是可以与任何非同源源一起使用?
答案 0 :(得分:6)
检查一下:
https://developer.mozilla.org/en/docs/Web/HTML/Element/script
使用内容交付网络(CDN)托管多个站点之间共享的脚本和样式表等文件可以提高站点性能并节省带宽。但是,使用CDN还存在风险,因为如果攻击者获得对CDN的控制权,攻击者可以将任意恶意内容注入CDN上的文件(或完全替换文件),从而也可能攻击所有获取的网站来自该CDN的文件。
通过确保您的Web应用程序或Web文档提取的文件(来自CDN或任何地方)在没有第三方注入任何额外信息的情况下,子资源完整性功能可以降低此类攻击的风险内容到这些文件中 - 并且没有对这些文件进行任何其他类型的更改。
在这里阅读更多内容:
https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity
答案 1 :(得分:0)
使用内容交付网络(CDN)托管多个站点之间共享的脚本和样式表等文件可以提高站点性能并节省带宽。但是,使用CDN还存在风险,因为如果攻击者获得对CDN的控制权,攻击者可以将任意恶意内容注入CDN上的文件(或完全替换文件),从而也可能攻击所有获取的网站来自该CDN的文件。
通过确保您的Web应用程序或Web文档提取的文件(来自CDN或任何地方)在没有第三方注入任何额外信息的情况下,子资源完整性功能可以降低此类攻击的风险内容到这些文件中 - 并且没有对这些文件进行任何其他类型的更改。
使用Subresource IntegrityEDIT
通过在任何<script>
或<link>
元素的完整性属性值中指定要告知浏览器要提取的资源(文件)的base64编码加密哈希,可以使用子资源完整性功能。
完整性值以至少一个字符串开头,每个字符串包含一个前缀,表示特定的哈希算法(当前允许的前缀是sha256,sha384和sha512),后跟一个破折号,并以实际的base64-结尾编码哈希。
完整性值可能包含由空格分隔的多个哈希值。如果资源与其中一个哈希匹配,则将加载该资源 使用base64编码的sha384哈希的完整性字符串示例:
SHA384-oqVuAfXRKap7fdgcCY5uykM6 + R9GqQ8K / uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC
严格来说,完整性值的“散列”部分是通过将特定散列函数应用于某些输入(例如,脚本或样式表文件)而形成的加密摘要。但是使用速记散列来表示加密摘要是很常见的,所以这就是本文中使用的内容。
更多信息:Link
答案 2 :(得分:0)