如何确保通过CDN传递的JavaScript文件不被更改?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (1)
  • 查看 (231)

我正在研究一些JavaScript文件将托管在CDN上的场景。我想有一些机制,以便在用户端下载这些文件时,我可以确保文件没有被篡改,确实来自指定的CDN。

我明白,如果我使用SSL,任务非常简单,但我仍然希望确保即使在不使用SSL的情况下也可以在HTTP上提供正确的文件。

就我所能搜索的内容而言,目前没有像跨平台支持的JavaScript文件数字签名这样的现有机制。也许这不是必需的?

是否有一些内置到浏览器的方法来验证JavaScript文件的作者?有什么我可以做的以安全的方式做到这一点?

提问于
用户回答回答于

例如,以下是jQuery CDN片段:

<script src="https://code.jquery.com/jquery-3.1.0.js"
        integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
        crossorigin="anonymous"></script>
用户回答回答于

事实上,像这样的功能目前正在以子资源完整性的名义起草查看标签的integrity属性<script> 尽管尚未完全被全面采用,但它实现了这一目的。

integrity 包含内联元数据,用户代理可以使用该内联元数据来验证提取的资源是否已经交付,没有意外的操作。请参阅子资源完整性。

来源

子资源完整性(SRI)是一项安全功能,它使浏览器能够验证它们获取的文件(例如来自CDN)是否在没有意外操作的情况下发送。它的工作原理是允许您提供获取文件必须匹配的加密哈希。

例:

<script src="https://example.com/example-framework.js"
    integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
    crossorigin="anonymous"></script>

但是请注意,如果您通过普通HTTP传输资源,这不会保护您免受中间人攻击。在这种情况下,哈希代码可能会被攻击者欺骗,使得对操作脚本文件的防御功能无用。

出于这个原因,除了上述安全措施之外,您应始终使用安全的HTTPS连接而不是普通的HTTP。

扫码关注云+社区

领取腾讯云代金券