【发布时间】:2019-08-18 06:22:14
【问题描述】:
我在服务器端使用加密将密码存储在数据库中。我关心的是客户端。我是否需要使用任何加密技术或 HTTPS/SSL 足以依赖?
【问题讨论】:
-
@dedecos 但如果您在客户端执行此操作,您的散列密码将成为您的密码。
-
@dedecos 但是如果有人能够嗅探网络,在 TLS 没有帮助的情况下(即他们已经在目标机器上安装了自己的根证书),那么他们就是还可以执行 MITM 攻击,使得所服务的页面不再对密码进行哈希处理,而他们只接收原始密码。而且,如果服务器不进一步对密码进行哈希处理(例如,作为 PBKDF 哈希的另一次迭代,使用不同的盐),那么如果有人破坏了数据库,他们可以使用几乎没有修改过的客户端访问系统中的任何帐户。
-
@dedecos 在服务器端散列密码(并正确散列)的好处是,如果有人以某种方式获得了您的数据库转储,他们 a) 不知道用户的纯文本是什么密码是(这将允许他们访问他们在您网站上的帐户,以及用户重复使用电子邮件/用户名和密码组合的任何网站)并且 b)他们无法判断任何两个用户是否具有相同的密码。在客户端散列场景中,受感染的数据库将拥有作为受害者登录服务所需的所有信息。
-
@dedecos 这是我现在 100% 的意见,但前提是服务器正确地散列密码等,并且客户端/服务器连接具有 TLS(并且使用 Let'sEncrypt,没有理由不这样做) ,在客户端散列密码几乎没有什么好处。鉴于 Javascript 本身不提供哈希方法,这意味着您的网站占用空间必须更大才能支持它。
标签: c# asp.net password-encryption password-hash