如何在没有HTTPS的情况下使用JavaScript通过HTTP安全地发送密码?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (134)

所有开发人员都面临的基本问题:每当用户提交表单时,密码都通过网络发送,并且必须受到保护。我开发的网站没有HTTPS。所有者也不想购买SSL证书,也不希望购买自己的SSL证书。所以我想在提交表单时保护通过HTTP使用Javascript发送的密码。

渴望downvoters:如何通过HTTP安全地发送密码?没有给出任何明智的解决方案,我处于另一种情况。

如果我使用MD5,则可以反转该密码字符串。那么nonce / HMAC呢?任何可用的JavaScript库?或者你有什么建议/暗示来解决?提前致谢!

提问于
用户回答回答于

没有办法安全地发送密码。用户可以验证没有SSL。

当然,您可以编写一些JavaScript,通过散列或公开密钥加密来保证通过线上传输的密码安全。但是,用户如何确保JavaScript本身在到达他们之前没有被中间人篡改,而不是发送密码给攻击者而不是站点,或者甚至只是破坏了算法的安全性?唯一的方法是让他们成为专业的程序员,让他们检查页面和脚本的每一行,以确保在输入密码之前它是合法的。这是不现实的情况。

如果你想让密码免受中间人的攻击,你必须购买SSL证书。没有别的办法了。习惯吧。

如果我使用MD5,就可以反转密码字符串。

不...至少不是小事。虽然MD5对它有攻击,但它是一种散列算法,因此是不可逆转的。你得用暴力强迫它。

但同样,中间人攻击者不需要看你的MD5。他可以简单地破坏您发送给用户的JavaScript来制作MD5。

用户回答回答于

这里的解决方案是根本不发送密码。使用质询/回应。

在原始形式中包括一大块随机文本和一个关键字。根据服务器上的密钥将原始随机文本存储在会话中。当客户提交表单时,使用JS将随机文本和密码一起散列。然后将用户名,密钥和哈希随机文本发送到服务器。不要发送密码。在服务器上,使用键查找原始随机文本,使用存储的密码执行相同的哈希操作。如果服务器散列值与客户端散列值相匹配,那么您知道客户端输入了正确的密码,而没有将密码发送到服务器。

密码是否正确,过期密钥和随机文本,以便每次都是一次性使用。

扫码关注云+社区