在使用POST方法发送密码之前,有没有办法用bcrypt散列密码?

时间:2013-10-11 13:49:15

标签: javascript security passwords http-post bcrypt

我想知道在通过POST方法从登录到处理页面发送密码之前是否有办法用bcrypt散列密码,以提高登录脚本的安全性。我无法使用SSL保护。

2 个答案:

答案 0 :(得分:4)

不幸的是,即使您按照您的建议行事,它仍然不会导致安全连接,从而使其容易受到Man in the Middle攻击。正如下面的评论中所讨论的,您在客户端进行的任何散列都会使密码无意义,因为它需要您通过线路发送散列,以与另一个散列服务器端进行比较。在这种情况下,攻击者(MitM)可以使用哈希进行身份验证。

如果您想要安全通信,则必须(至少)实施TLS / SSL。

答案 1 :(得分:2)

如果您使用bcrypt对密码进行了哈希处理,给出了足够强的密码和密码,那么密码就是安全的。

如果传入的哈希值与服务器上的哈希值不匹配,则可以拒绝访问。

但是,您的设计的主要问题是现在不再需要密码来访问系统。哈希现在变成了进行身份验证所需的全部内容。因此,散列成为密码的合适替代品。好吧,你刚刚将未加密的伪密码传递给未经验证的服务器。

密码应在使用bcrypt或类似内容存储在服务器上之前进行哈希处理。但是,密码通常应该传递到服务器(通过加密连接以明文形式传递)并在那里散列,以便您可以确保客户端实际知道密码。

该方法的一种替代方法,而不是SSL,您可能会考虑使用摘要式身份验证,但这只能起作用,因为每次对服务器的调用都会重新进行身份验证。如果您使用任何类型的基于令牌的会话,它可以用于重播和MitM攻击,因此必须加密。此外,摘要式身份验证有点陈旧,而不像TLS那样具有加密安全性,并且没有服务器身份验证,因此我们仍然以HTTPS(SSL / TLS)结束。

HTTPS(SSL / TLS)提供服务器标识验证并提供完整的端到端加密,这是您应该使用的。你可以模仿SSL提供的所有保护措施,但似乎有很多工作试图做一些已经存在并且很容易实现的东西。