Security 客户端浏览器上的密码哈希

Security 客户端浏览器上的密码哈希,security,hash,passwords,Security,Hash,Passwords,在将用户密码发送到web服务器之前,在客户端浏览器中散列用户密码的最佳方式是什么,这样只有散列信息而不是纯文本密码会被删除 编辑:假设使用了HTTP(而不是HTTPS)使用javascript计算哈希。有关如何在JS中计算SHA-1哈希的示例,请参见 请注意,如果您依赖Javascript,那么一旦有人禁用JS,您的系统就会失败。如果您担心这一点,您应该使用HTTPS,因为HTTPS也有其自身的缺陷(例如,如果您希望证书立即被浏览器接受,那么证书就要花钱。)并非所有人的浏览器都启用了JavaSc

在将用户密码发送到web服务器之前,在客户端浏览器中散列用户密码的最佳方式是什么,这样只有散列信息而不是纯文本密码会被删除


编辑:假设使用了HTTP(而不是HTTPS)

使用javascript计算哈希。有关如何在JS中计算SHA-1哈希的示例,请参见


请注意,如果您依赖Javascript,那么一旦有人禁用JS,您的系统就会失败。如果您担心这一点,您应该使用HTTPS,因为HTTPS也有其自身的缺陷(例如,如果您希望证书立即被浏览器接受,那么证书就要花钱。)

并非所有人的浏览器都启用了JavaScript,甚至我认为在纯文本频道上发送哈希的想法也不够安全


<>我建议你考虑一个安全连接。

尝试使用这个。出于好奇,在服务器端使用SSL/HTTPS和加密有什么问题?

这个网站有非常全面的哈希/加密功能:

JavaScript端加密,比如jQuery加密库,可以阻止窃听者。然而,MITM(中间人)仍然可能发生。SSL/TLS是强烈建议采用的最终选择,除非您使用共享主机(没有专用IP),或者您的站点接收的流量太大,以至于您无法简单地加密所有连接(JS、CSS、HTML等等)。

为什么要这么做?实际上,密码散列已经成为密码,中间拦截散列的人可以使用它作为用户进行身份验证和执行任何操作。另一方面,如果你不相信中间人,为什么不直接发送密码呢?

为什么我们要散列密码?因此,如果获得哈希值,则很难使用它们

如果系统中的散列被公开,在这个模型中会发生什么?攻击者只需将它们发送到服务器并作为用户进行身份验证


这就是为什么密码哈希总是发生在服务器上,而不是客户端

我希望您计划通过安全通道发送哈希,或者这是质询/响应机制的一部分。否则,这并不比以明文形式发送密码本身更安全…@Roger Lipscombe,这种方法实际上对用户来说可能是一个小小的改进。即使没有可用的安全通道(只有SSL可以工作,没有JS替代方案是防弹的),那么它至少会使散列成为站点独有的。当然,要使散列唯一,必须对其进行腌制。当然,这会使散列对站点唯一——如果用户在多个站点上使用相同的密码,那么这很有用;不阻止对同一站点的重播。当然,如果散列是咸的,那么要么盐必须从客户机传输到服务器——不比以前更安全;或者另一种方式,在这种情况下,它是挑战/响应。唯一的密码正是我所指的,但要澄清关于salt的问题;这只会让监听连接的人很难强行使用原始密码(比如DB存储)。此时,用户访问的特定站点的身份验证已被破坏,但这可能是正常的,取决于站点,而公开个人信息(如用户选择的密码)则不是。顺便说一句,由于OP似乎没有可用的SSL,我认为质询/响应是不可行的,因为它依赖于一个共享的秘密;也就是说,经过身份验证+加密的通信必须已经发生(例如,在注册时使用SSL)。质询响应可以防止窃听—您不能更改任何数据,只需监听数据即可。由于令牌是一次性的,窃听者总是会迟到并且无法使用令牌。是的,这是真的,我想这会阻止仅窃听的攻击者发现密码。但在这种情况下,我只会使用HTTP摘要身份验证,而不是使用自己的身份验证。现在(2018年),几乎所有用户都启用了javascript。