如何检查加载的 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中的完整预加载音频

如何通过 javascript 检查 chrome:// 文件是不是存在,而不实际加载文件?

如何检查是否已加载Javascript脚本异步(Async)或async属性存在?

Javascript实现图片的预加载的完整实现

Javascript实现图片的预加载的完整实现