我正在处理一个情境,其中一些JavaScript文件将托管在CDN上。我想要某种机制,以便在用户下载这些文件时,我可以确保文件没有被篡改,并且确实来自指定的CDN。
我知道如果我使用SSL,任务会非常容易,但是即使在没有SSL的HTTP下,我也希望确保正确的文件被提供。
据我所搜寻,似乎没有现有的数字签名机制用于JavaScript文件并跨平台支持。也许不需要?
浏览器内置了一些方法来验证JavaScript文件的作者吗?是否有任何安全的方法可以实现此目的?
我正在处理一个情境,其中一些JavaScript文件将托管在CDN上。我想要某种机制,以便在用户下载这些文件时,我可以确保文件没有被篡改,并且确实来自指定的CDN。
我知道如果我使用SSL,任务会非常容易,但是即使在没有SSL的HTTP下,我也希望确保正确的文件被提供。
据我所搜寻,似乎没有现有的数字签名机制用于JavaScript文件并跨平台支持。也许不需要?
浏览器内置了一些方法来验证JavaScript文件的作者吗?是否有任何安全的方法可以实现此目的?
https://code.jquery.com/
引用了一个脚本,那么任何篡改了code.jquery.com
的人都能够对你的网站进行跨站脚本攻击,无论是否使用HTTPS访问code.jquery.com
。但是有了这些检查机制,攻击者只能防止脚本加载,而不能替换为恶意脚本。 - Ajedi32<script src="https://code.jquery.com/jquery-3.1.0.js"
integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
crossorigin="anonymous"></script>
code.jquery.com
,那么这可以保护您免受遭到攻击的code.jquery.com
的影响。 - SilverlightFoxhttp://www.html5rocks.com/en/tutorials/security/content-security-policy/
内容安全策略:script-src 'sha256-qznLcsROx4GACP2dm0UCKCzCG-HiZ1guq6ZZDob_Tng='
需要注意几点。sha*-前缀指定用于生成哈希值的算法。在上面的示例中,使用了sha256-。CSP还支持sha384-和sha512-。生成哈希时不要包括标签。此外,大小写和空格也很重要,包括前导或尾随空格。
使用Chrome 40或更高版本,您可以打开DevTools,然后重新加载页面。控制台选项卡将包含每个内联脚本的正确sha256哈希的错误消息。
这种机制已经存在了相当长的时间,因此浏览器支持可能非常好,只需确保检查即可。
此外,如果您想确保旧的不符合规范的浏览器不会不安全,您可以在页面顶部包含一个同步重定向脚本,该脚本不被策略允许。
关于此类签名可以做什么和不能做什么,有一个重要的要点。它可以保护用户免受某人修改您的代码的假想攻击。它无法确保您的站点正在执行的是您的代码。换句话说,您仍然不能信任从客户端发送到您的站点的任何内容。
# ...
1.2.3.4 vile-pirates.org trustworthy.cdn
# ...
<script src="https://pagecdn.io/lib/jquery/3.4.1/jquery.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>