客户端和服务器之间的安全密码传输



我最近读了很多关于安全的文章,有些事情真的困扰着我。我正在使用Node。JS和我想把用户数据存储在数据库中。我目前在服务器上对密码进行散列,然后将其保存到DB中。但当用户向服务器发送数据时,他只发送纯文本。我认为这是错误的做法。我正在使用Bcrypt btw.

我想使用的方法是:当用户需要登录时,我在客户端上对密码进行散列,然后我向服务器发送一个带salt的散列密码。然后,服务器再次散列密码,并将结果与用户传递的第一个salt一起存储在DB中。这意味着我有serverHash(userHash(userPassword))userSalt

当用户登录时,我想从DB中为他获取一个userSalt,并使用该salt对他的userPassword进行散列。然后我将userHash(userPassword)发送到服务器,然后比较userHash(userPassword)serverHash(userHash(userPassword))

这种方法是好的和安全的,还是有更好的方法可以做到这一点,我可以使用一些第三方库,或者我可以摆脱这种方法?

编辑:如果有人遇到这个问题,不要这样做,TLS可能会完成这项工作,如果没有,我想有证书会有所帮助,我不是100%确定,但不要相信我的话。

数据库哈希密码的用途

服务器中的哈希密码解决了意外访问数据库的担忧。我们认为服务器脚本是在安全的环境中执行的。

授权用户可以在没有保护的情况下泄露任何数据

当用户使用用户名/密码登录时,我们将向他/她授予操作授权,并查看一些数据

如果有饼干侵入:

  1. 我们的服务器脚本
  2. 客户端浏览器或
  3. 中间媒体(网络拦截(

我们的目标(保护授权(将被破坏。

因此,如果cracker可以访问客户端区域拦截流量数据

例如:授权管理员,具有重密码保护机制,可以泄漏html数据,如果破解程序只是拦截网络流量,那么这些数据往往只能由管理员查看。

解决方案:流量加密

连接应该像使用SSL一样进行加密,而不是将散列密码发送到服务器端。

今天的Web开发

在Web开发中,在处理敏感的数据操作(包括登录的场景(时,使用HTTPS是一种很好的做法

即使在现代浏览器中,当处理html<input type='password'/>而不使用Https时,它们也会显示警告

最新更新