我正在处理一个场景,在这个场景中,一些JavaScript文件将被托管在CDN上。我希望有一些机制,这样当这些文件在用户端下载时,我可以确保这些文件没有被篡改,并且确实来自指定的CDN。
我知道,如果我使用SSL,这项任务非常容易,但我仍然希望确保即使在没有SSL的HTTP上也能提供正确的文件。
据我所知,目前还没有像JavaScript文件的数字签名这样的跨平台支持的机制。也许它不是必需的?
浏览器中有没有内置的方法来验证JavaScript文件的作者?我能做些什么来以一种安全的方式做到这一点?
发布于 2016-08-01 22:12:26
您要查找的是subresource integrity检查。
例如,下面是jQuery CDN代码片段:
<script src="https://code.jquery.com/jquery-3.1.0.js"
integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
crossorigin="anonymous"></script>
发布于 2016-08-02 10:35:13
如果您的敌对模型允许攻击者修改从CDN传送的JavaScript文件,则您的敌对模型允许攻击者在传送时修改引用源,以删除任何验证尝试,将源地址更改为CDN以外的地址,和/或完全删除对JavaScript的引用。
让我们不要打开蠕虫的罐子,你的应用程序如何确定用户的解析器是否通过HTTP请求正确解析到CDN (或任何其他没有经过验证的信任链的机制)。
/etc/hosts:
# ...
1.2.3.4 vile-pirates.org trustworthy.cdn
# ...
发布于 2019-10-07 14:09:08
您可以用子资源完整性来确保这一点。许多公共CDN在CDN网站上提供的可嵌入代码中包含SRI哈希。例如,在PageCDN上,当您单击jQuery CDN页面上的jquery文件时,您可以选择是复制URL还是使用包含SRI散列的脚本标记,如下所示:
<script src="https://pagecdn.io/lib/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
在页面加载时,浏览器将发出对此资源的请求,并在请求完成时将接收到的文件的散列与脚本标记中作为完整性值给定的散列进行匹配。如果两个散列都不匹配,浏览器将丢弃jquery文件。
目前,全球91%的浏览器都支持该功能。有关caniuse的更多详细信息。
https://stackoverflow.com/questions/38700923
复制相似问题