确保JavaScript未被篡改

6
我正在编写一个Web应用程序,对客户端数据进行一些加密,以确保我永远不会看到客户端发送到我的服务器的内容。我真正担心的是第三方获取了我的JavaScript代码,然后在我的JavaScript文件中添加了后门或其他恶意代码。
由于JavaScript通常托管在第三方CDN上,如何确保浏览器下载之前JavaScript文件没有被更改或篡改?我宁愿在我的页面上放置一个大的安全提示,也不要在我的客户端浏览器中加载被篡改的JavaScript。
在普通程序中,我会数字签名该文件以确保它没有被篡改,但我认为浏览器不支持在下载和/或加载JavaScript文件之前检查给定签名。否则,将任何文件托管在CDN上都将是巨大的安全风险。SSL仅保护传输中的文件,而不是它坐落在CDN服务器上的时候。

2
如果你的CDN被黑了怎么办? - Evan Davis
@Mathletics 是的。或者CDN提供商的一名流氓员工决定玩一下。 - Cromulent
无论哪种情况,您都需要找到一个新的CDN。 - Evan Davis
2
这个问题实际上没有解决方案。请参阅此文章:http://www.matasano.com/articles/javascript-cryptography/ - ntoskrnl
@ntoskrnl 这是一篇非常有趣的文章。谢谢。我想解决方案比最初想象的要难得多。回到起点重新规划吧。 - Cromulent
您还需要担心通过受损客户端系统进行的客户端脚本注入。 - Larry K
2个回答

3
如果您希望确保它们未经第三方CDN更改即可到达客户端,则需要通过HTTPS直接从源服务器提供JavaScript内容。与哈希值进行比较(根据@rishta的回答)意味着您必须托管JavaScript以执行此操作(在页面中或从服务器提供的单独的.js文件中),因此最好直接从您的服务器提供客户端加密代码,这可能会减少总体开销。

1

如果用于验证MD5哈希的JavaScript已被篡改,会发生什么?不要相信任何东西。 - Cromulent
@Cromulent 如果他们篡改了你的防篡改措施,那么你就被淘汰了。直接提供你的文件。获取自己的POP,将光纤拉到它们那里。不要相信任何东西。 - Evan Davis
2
直接使用验证库(如嵌入式JS)进行服务。 - Jacek Krysztofik
MD5被认为在这个用途上完全失效。 - ntoskrnl
不要只使用一种类型的哈希算法。 - Jacek Krysztofik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接