如何检查加载的 Javascript 代码的完整性
Posted
技术标签:
【中文标题】如何检查加载的 Javascript 代码的完整性【英文标题】:How to check the integrity of loaded Javascript code 【发布时间】:2013-03-06 23:20:51 【问题描述】:我运行一个比特币钱包,它使用浏览器端 javascript 来加密和解密比特币密钥。
我想让 javascript 在 Github 上可供审查,然后从 github 存储库加载 javascript。
我的问题是我需要检查加载的 Javascript 的完整性,以确保在 Github 上没有被篡改。
我怎样才能最好地做到这一点?会不会是这样的。
-
使用 ajax 调用加载远程 Javascript。
MD5 哈希和比较。
如果状态良好,执行它。
【问题讨论】:
客户端不能自己搞乱校验和计算功能吗? 也许将您的代码存储在另一个服务器上。只有您可以访问的 CDN。这样你就可以确定它没问题。 这在检查客户端是否至关重要?我很确定您知道客户端实际上在任何方面都不安全。完整性检查确实必须由服务器端脚本完成,然后将其反馈给 JavaScript,否则您将面临巨大的安全问题。 任何在浏览器中运行的东西都可以被篡改。直接加载或加载扩展或添加的脚本。 我很确定明确不鼓励使用 github 作为 CDN。 【参考方案1】:现在有(或很快将有)一种优雅的方式来实现这一目标(在提出问题 2 年后)。
http://www.w3.org/TR/SRI/
您现在可以在脚本标签内指定“完整性”参数:
<script src="https://github.com/<path>/yourscript.js"
integrity="sha256-SDf......">
这不适用于通过 AJAX 请求加载的脚本。但是您可以潜在地将脚本引用为指向 CDN 的脚本标签(最好不要直接在 github 上)
【讨论】:
以上是关于如何检查加载的 Javascript 代码的完整性的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 javascript 检查 chrome:// 文件是不是存在,而不实际加载文件?