17

我在 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,还是适用于任何非同源源?

4

3 回答 3

17

检查这个:

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

于 2015-12-23T05:19:54.893 回答
2

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

子资源完整性功能使您能够降低此类攻击的风险,方法是确保您的 Web 应用程序或 Web 文档获取的文件(从 CDN 或任何地方)已经交付,而无需第三方将任何额外的内容注入到这些文件中。文件——并且根本没有对这些文件进行任何其他类型的更改。

使用子资源完整性编辑您可以通过在任何或元素
的完整性属性值中指定您告诉浏览器获取的资源(文件)的 base64 编码加密哈希来使用子资源完整性功能。<script><link>

完整性值至少以一个字符串开头,每个字符串都包含一个前缀,指示特定的哈希算法(当前允许的前缀是 sha256、sha384 和 sha512),后跟一个破折号,并以实际的 base64 编码哈希结尾。

一个完整性值可能包含多个由空格分隔的哈希值。如果资源与其中一个哈希值匹配,则将加载该资源。
具有 base64 编码的 sha384 哈希的示例完整性字符串:

sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC
严格来说,完整性值的“哈希”部分是通过将特定哈希函数应用于某些输入(例如,脚本或样式表文件)而形成的加密摘要。但是通常使用速记散列来表示加密摘要,所以这就是本文中使用的内容。

欲了解更多信息:链接

于 2015-12-23T05:21:47.847 回答
1

子资源完整性定义了一种机制,用户代理可以通过该机制验证获取的资源是否已在没有意外操作引用的情况下交付

完整性属性是允许浏览器检查文件源以确保如果源已被操纵,则永远不会加载代码。

当使用“CORS”加载请求时,会出现跨域属性,这现在是在未从“同源”加载时进行 SRI 检查的要求。有关跨域的更多信息

有关 Bootstrap CDN 实施的更多详细信息,请参见此处

于 2015-12-23T05:26:11.953 回答