【问题标题】:What is the purpose of the integrity attribute in HTML? [duplicate]HTML中完整性属性的目的是什么? [复制]
【发布时间】:2016-03-29 11:53:50
【问题描述】:

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

【问题讨论】:

    标签: javascript twitter-bootstrap subresource-integrity


    【解决方案1】:

    检查一下:

    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

    【讨论】:

    • 我想知道为什么几乎所有的 CDN 都忽略了不提供哈希的风险。
    • @Chuck 原因之一是提供由维护人员更新的脚本以提供更新/新功能。但是,是的,对于所有这些静态版本化脚本,应始终提供 SRI 哈希。
    【解决方案2】:

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

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

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

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

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

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

    欲了解更多信息:Link

    【讨论】:

      【解决方案3】:

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

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

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

      有关 Bootstrap CDN 实施的更多详细信息是 here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-11-09
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        • 2023-01-01
        • 1970-01-01
        • 2015-02-10
        相关资源
        最近更新 更多