【问题标题】:Safe password transfer between client and server [duplicate]客户端和服务器之间的安全密码传输[重复]
【发布时间】:2021-04-17 15:51:22
【问题描述】:

我最近阅读了很多关于安全性的内容,有些事情让我很困扰。 我正在使用 Node.JS,我想将用户数据存储在数据库中。我目前在服务器上散列密码,然后将其保存到数据库。但是当用户向服务器发送数据时,他只发送纯文本。我认为这是错误的做法。顺便说一句,我正在使用 Bcrypt。

我想使用的方法是:当用户需要登录时,我在客户端对密码进行哈希处理,然后将带有盐的哈希密码发送到服务器。然后服务器再次对密码进行哈希处理,并将结果与​​用户传递的第一个盐一起存储在数据库中。这意味着我有serverHash(userHash(userPassword))userSalt

当用户登录后,我想从数据库中获取userSalt 并使用该盐对他的userPassword 进行哈希处理。然后我将userHash(userPassword) 发送到服务器,然后比较userHash(userPassword)serverHash(userHash(userPassword))

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

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

【问题讨论】:

    标签: node.js database security authentication hash


    【解决方案1】:

    数据库哈希密码的用途

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

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

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

    如果有饼干侵入:

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

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

    所以在客户端散列密码并不能解决任何问题,如果 破解者可以访问客户端区域拦截流量 数据

    例如:授权管理员,具有严格的密码保护机制, 如果破解者只是拦截网络流量,则可能会泄漏 html 数据,这些数据往往只能由管理员查看。

    解决方案:流量加密

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

    今日网站开发

    在 Web 开发中,在处理敏感的 DataActions 时使用 HTTPS (Http+Ssl) 是一种很好的做法(场景包括登录)

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

    【讨论】:

    • 谢谢你的回答,我真的很感激,但我正在阅读,看起来 https 实际上确实有很大帮助,但即使我使用的是 https,这并不意味着我有 100% 的安全连接。这就是我首先写的问题。我的意思是,从我读到的内容看来,有人可能正在监听连接,如果有人这样做,这意味着我给了他一个普通的用户密码。
    • 如果有人监听连接,只是认为他看不到普通密码,但他会看到敏感数据,身份验证目标是为了保护他们免受黑客攻击。
    • 即使破解者可以访问受害者的浏览器,他/她也可以访问密码和敏感数据。
    • 我建议在 Https 中使用证书来防止破解者受到中间人攻击
    猜你喜欢
    • 1970-01-01
    • 2010-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多