从哪里开始加密用户密码?

Where to start encrypting a user password?

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

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

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

我的顾虑是否正确?

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

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

Using Hash in C#

I encrypt the user password in the server before persisting it in the database.

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

如果你真的不能使用提到的功能,数据库原生哈希功能比加密更好。

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

the password is in plaintext when coming in through a https request

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

是的,在浏览器端可以看到加密前的密码(但是用户输入了密码,所以访问自己的数据看起来没问题)而且服务器无论如何都需要验证密码。

Isn't that a dangerous way to handle user passwords?

确实如此。因此,将用户身份验证卸载到已经证明的服务(AWS Cognito、IBM AppID、Azure AD 等)或社交帐户(Google、FB、..)

可能是个好主意

I think it would be better to encrypt user passwords in the client side code

如前所述,这根本没有帮助。那么加密后的值就变成了密码