bab*_*a26 88 javascript code-signing
我正在开发一些场景,其中一些JavaScript文件将托管在CDN上.我希望有一些机制,以便在用户端下载这些文件时,我可以确保文件没有被篡改,并且确实来自指定的CDN.
我知道如果我使用SSL,任务很容易,但我仍然希望确保即使在没有SSL的HTTP上也能提供正确的文件.
据我所知,没有现成的机制,如JavaScript文件的数字签名,跨平台支持.也许不需要它?
是否有一些内置于浏览器中的方法来验证JavaScript文件的作者?我能以安全的方式做些什么吗?
Tim*_*imo 140
事实上,目前正在以Subresource Integrity的名义起草这样的功能.查看标签的integrity属性<script>. 虽然尚未全面采用,但它实现了这一目的.
integrity包含内联元数据,用户代理可以使用该元数据来验证已提供的已获取资源是否没有意外操作.请参阅子资源完整性.
子资源完整性(SRI)是一种安全功能,使浏览器能够验证他们获取的文件(例如,来自CDN)是否在没有意外操作的情况下传递.它的工作原理是允许您提供所提取文件必须匹配的加密哈希.
例:
<script src="https://example.com/example-framework.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous"></script>
Run Code Online (Sandbox Code Playgroud)
但请注意,如果您通过普通HTTP传输资源,这将无法保护您免受中间人攻击.在这种情况下,攻击者可以欺骗哈希码,使得对被操纵的脚本文件的防御变得无用.
因此,除了上述安全措施之外,您应始终使用安全HTTPS连接而不是纯HTTP.
Bri*_*ian 36
您正在寻找子资源完整性检查.
例如,这是jQuery CDN片段:
<script src="https://code.jquery.com/jquery-3.1.0.js"
integrity="sha256-slogkvB1K3VOkzAI8QITxV3VzpOnkeNVsKvtkYLMjfk="
crossorigin="anonymous"></script>
Run Code Online (Sandbox Code Playgroud)
免责声明:与往常一样,您应该只考虑这些机制在使用https时有用,因为它们可以通过MitM轻松禁用
除了上述答案中的机制外,您还可以在父页面上使用内容安全策略 http响应标头.
http://www.html5rocks.com/en/tutorials/security/content-security-policy/
Content-Security-Policy:script-src'sha256-qznLcsROx4GACP2dm0UCKCzCG-HiZ1guq6ZZDob_Tng ='
这里有几点需要注意.sha* - 前缀指定用于生成哈希的算法.在上面的示例中,使用sha256-.CSP还支持sha384-和sha512-.生成哈希时不包含标记.大写和空白也很重要,包括前导或尾随空格.
使用Chrome 40或更高版本,您可以打开DevTools然后重新加载页面."控制台"选项卡将包含每个内联脚本的正确sha256哈希值的错误消息.
这种机制已存在很长一段时间了,所以浏览器支持可能还不错,请务必检查.
此外,如果要确保旧的不兼容的浏览器不安全,可以在页面顶部包含策略不允许的同步重定向脚本.
| 归档时间: |
|
| 查看次数: |
10754 次 |
| 最近记录: |