JavaScript代码签名

5 javascript security ajax code-signing

使用主流现代浏览器之一的用户如何确定即使在不受信任的网络上也运行我未经修改的javascript代码?

以下是有关我的情况的更多信息:

我有一个处理私人信息的Web应用程序.登录过程是JavaScript 中经过密码验证的密钥协议的实现.基本上在登录期间,在客户端和服务器之间建立共享密钥.用户登录后,使用共享密钥对与服务器的所有通信进行加密.系统必须能够安全地抵御主动中间人攻击.假设我的实现是正确的并且用户足够聪明而不会成为网络钓鱼攻击的受害者,那么系统中只剩下一个大漏洞:攻击者可以在下载时篡改我的应用程序并注入窃取密码的代码.基本上整个系统依赖于用户可以信任其机器上运行的代码的事实.我想要一些类似于签名applet的东西,但如果可能的话,我更喜欢纯粹的javascript解决方案.

Wil*_*del 5

也许我误解了您的问题,但我的第一个想法是使用 SSL。它旨在确保您正在与您认为的服务器交谈,并且没有人在中途修改内容。在这种情况下,您甚至不必信任网络,因为 SSL 的性质。

这种方法的好处是您可以相当轻松地将其放入现有的 Web 应用程序中。在大多数情况下,您基本上可以将 HTTP 服务器配置为使用 SSL,并将您的http://请求更改为https://.

  • 事实是,对于当今网络上的几乎所有主要业务,SSL 都“足够安全”。每次您在线购买商品时,您都在使用 SSL。每次登录基于 Web 的电子邮件时,您都在使用 SSL。每次您在线检查您的银行帐户时,您都在使用 SSL。如果上述任何一种情况的公司没有使用 SSL,请立即切换。听起来您已经决定编写自己的解决方案,所以我不会再浪费时间让您相信您错了(抱歉这么直率)。最终你会自己学会它(艰难的方式)。祝你好运。 (4认同)
  • 关于 DNS 欺骗的另一个注意事项,因为在谈论 SSL 和中间人攻击时,它是如此普遍。即使攻击者欺骗了 DNS 响应并将您的用户指向恶意 Web 服务器,恶意服务器仍然需要正确的证书。当他们无法生成正确的证书时,用户的浏览器会抛出各种危险信号。 (3认同)
  • 弱点多?你能详细说明一下吗? (2认同)

Jos*_*dan 0

您可以有一个外部 Javascript 文件,该文件获取登录 JS 的 MD5 哈希值,并向服务器发送 Ajax 请求以验证它是否正确且是最新的。此处使用基本的安全或加密实践 - 公钥/私钥或其他一些方法来确保响应来自您的服务器。

然后,您可以自信地向用户显示客户端脚本已验证,并允许登录脚本继续进行。

  • @Toni:TLS/SSL 成为处理这个特定问题的行业标准是有原因的。它以相对较低的成本提供非常高的安全性。当然,使用 SSL 时性能会受到影响,但性能影响不足以证明您自己的基于 Javascript 的解决方案是合理的。无论您想出什么 Javascript 解决方案,您都将很难阻止 DNS 欺骗破坏整个事情。有了 SSL,它就可以工作了。 (2认同)
  • @Toni:您能列出您正在谈论的一些安全问题吗?SSL 的大多数问题都是由于密钥长度过短或浏览器安全漏洞造成的,而这些都不是 SSL 本身的问题。底层协议非常安全。 (2认同)