【问题标题】:Where to start encrypting a user password?从哪里开始加密用户密码?
【发布时间】:2021-09-29 13:56:12
【问题描述】:

我在加密用户密码时遇到了问题。我有一个可以创建用户帐户的授权服务。给定的是emailpassword。至于现在我在服务器中加密用户密码,然后将其保存在数据库中。

但是我觉得这有点不对,因为通过 https 请求进入时密码是明文的。所以我实际上可以记录用户的真实密码。

这不是处理用户密码的危险方式吗?我认为在提交表单(注册或登录)之前在客户端代码(javascript)中加密用户密码会更好。所以密码已经加密了。

我的担忧是否正确?

【问题讨论】:

  • 加密密码客户端只是使加密的密码,密码。如果您在日志中找到此加密密码,您可以使用它登录(无需加密步骤)。
  • 你为什么有用户密码?您的服务将用户密码用于什么目的?如果要对服务进行身份验证,那么您加密密码,您应该按照 gusto2 的回答对其进行哈希处理。

标签: encryption


【解决方案1】:

我在服务器中加密用户密码,然后将其保存在数据库中。

请不要。尽可能使用慢速加盐哈希(BCrypt、SCrypt、Argon2、..)

如果你真的不能使用上面提到的功能,那么数据库原生散列功能比加密更好。

https://practice-code.github.io/architecture/how-to-store-passwords-in-a-secure-way/

通过 https 请求进入时密码为明文形式

不,https 会加密客户端(浏览器)和服务器之间的流量。

是的,您可以在加密之前在浏览器端看到密码(但是用户输入了密码,因此访问自己的数据看起来没问题)并且服务器仍然需要验证密码。

这不是处理用户密码的危险方式吗?

确实如此。因此,将用户身份验证卸载到已验证的服务(AWS Cognito、IBM AppID、Azure AD 等)或社交帐户(谷歌、FB 等)可能是个好主意

我认为在客户端代码中加密用户密码会更好

正如已经评论的那样,这根本没有帮助。那么加密后的值就变成了密码

【讨论】:

    【解决方案2】:

    使用 HTTPS 时没有明文,数据被加密是使用服务器证书的重点!

    作为一种替代方法,通常将密码哈希而不是密码文本存储在数据库中,因此最终您的代码使用哈希算法生成密码哈希并将其与存储在数据库中的密码哈希进行比较,即使有人能够访问数据库记录,无法弄清楚密码是什么,因为他得到的只是哈希值

    Using Hash in C#

    【讨论】:

      猜你喜欢
      • 2011-09-02
      • 2012-08-06
      • 2012-08-14
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2011-04-30
      • 1970-01-01
      相关资源
      最近更新 更多