Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Cient端密码散列的安全风险_Php_Javascript_Security_Web Applications_Hash - Fatal编程技术网

Php Cient端密码散列的安全风险

Php Cient端密码散列的安全风险,php,javascript,security,web-applications,hash,Php,Javascript,Security,Web Applications,Hash,我已经阅读了大量的博客文章、教程,以及与正确的密码哈希有关的所有问题。但是我仍然有一个关于客户端哈希的风险的问题 我想用JavaScript在客户端对用户密码进行加密和加密,然后在服务器上重新加密和加密,所有数据都通过HTTPS(无纯文本)发送。客户端的散列不会使用与服务器相同的salt或算法 从逻辑上讲,对于服务器来说,用户密码是散列的,因此,如果数据传输是纯文本的,那么密码是否被散列对于攻击者来说无关紧要。如果读取JavaScript,公开客户端散列,从理论上讲,获取已知长度和字符(0-9&

我已经阅读了大量的博客文章、教程,以及与正确的密码哈希有关的所有问题。但是我仍然有一个关于客户端哈希的风险的问题

我想用JavaScript在客户端对用户密码进行加密和加密,然后在服务器上重新加密和加密,所有数据都通过HTTPS(无纯文本)发送。客户端的散列不会使用与服务器相同的salt或算法

从逻辑上讲,对于服务器来说,用户密码是散列的,因此,如果数据传输是纯文本的,那么密码是否被散列对于攻击者来说无关紧要。如果读取JavaScript,公开客户端散列,从理论上讲,获取已知长度和字符(0-9&a-f)的散列是否更容易,然后获取可变长度的密码以及所有字母数字字符、大小写和特殊字符?

例如,客户端的基本MD5哈希(我知道MD5是坏的)生成128位(16字节)的哈希。因此,对于16个可能的字符,即16^16=1.84e19个可能的散列

对于长度为8-10个字符的密码,请从任何字母数字或特殊字符中进行选择(by,即95)。这就是95^8+95^9+95^10,等于6.05e19。正如您所看到的,这个数字是散列密码数量的3倍多(并且这个数字只会随着您所需密码长度的增加而增加)

因此,不将哈希密码从客户端发送到服务器不是更好吗


作为这个问题的第二部分,从阅读资料中,我了解到字典等工具可以从逻辑上减少这种可能性。这些工具真的能将结果缩小到1.84e19哈希组合以下吗?

在客户端进行哈希没有任何意义。然后,您所做的就是使应用程序依赖于javascript

可以读取传输的攻击者可以直接向服务器提交哈希,而不需要输入密码


HTTPS在传输时完全保护用户密码。除非他们在聪明的攻击者的范围内使用无线键盘。嘿。

有什么意义?如果你不是一个信息安全专家,不要试图成为一个。找出当前的最佳实践是什么,然后就这么做。等等,你是说你想对密码进行哈希运算,但这个问题是关于为什么你这么做可能是错误的?如果是的话,我认为是的。让你的登录页面使用TLS(https)并依赖它。重点是保护用户的密码。。但是,注意到第三方侦听器不需要数据,可以简单地使用散列,这是一个很好的+1。