|
|
1
1
我想解决一个类似的问题,即可以在服务器上登录纯文本密码。结论是 您应该始终另外散列客户端密码 如果可以的话。 以下是一些关于 客户端加服务器 散列: Salted Password Hashing - Doing it Right 具体见:
经过研究,对客户机进行散列处理似乎也有明显的安全好处。如果通过https的密码被泄露,或者如果密码登录到服务器上,那么纯文本密码就不能很容易地在用户的其他帐户上重用(许多用户重用他们的密码)。 唯一可能的缺点是客户端性能和服务器端密码验证。用户可以操作您的客户端js并提交一个“弱”密码。服务器知道得再好不过了。但我认为这是一个小问题,它依赖于人们故意修改他们的客户端代码,以削弱他们自己的安全性。 |
|
|
2
3
客户端散列可以完成,但是我们应该考虑我们真正实现了什么。 你可能 希望 要实现的是,当通过(希望是加密的ssl)连接发送密码时,攻击者无法读取该密码。如果攻击者能够拦截流量,则很有可能他也可以更改流量,因此可以删除任何执行客户端散列的javascript。然后整个保护来自服务器端哈希。 你什么 可以 实现是,可以减少服务器的负载,因为您让客户端做了繁重的计算。如果可以保证客户端的完整性,那么可以在客户端上进行密钥拉伸,并在服务器上使用快速散列。对于已安装的应用程序,这可能是一个选项,但不建议用于网站,因为无法保证客户端的完整性,而且javascript通常速度较慢,因此可以减少查房次数。 如果攻击者只能监听通信量,但不能更改它,那么您将得到一个小的好处。你愿意花在散列上的时间必须分为客户机部分和服务器部分(不能让用户永远等待)。服务器时间必须足够长,以保证安全性,这样在客户端上就没有多少时间了。如果在客户机上使用过快的散列,则截获的密码散列仍在暴力强制的范围内(尽管 是 一个攻击者必须跨过的障碍)。 所以简而言之,这通常是不值得的麻烦,优势太小,时间最好投资在服务器上的散列时间。 |
|
|
3
1
任何散列(包括
另一个需要考虑的问题是终端用户设备的限制——例如,android设备的cpu相当弱,并且远不如一般服务器的强大。作为
因此,除非你能保证你的所有用户都在足够强大的设备上运行,否则不建议你这样做
|
|
|
4
-2
此方案的问题在于它要求服务器信任客户端 . 特别是,它假设客户机将始终实际散列用户键入的内容。如果我们像入侵者那样打破这个假设,问题就会出现。 bob从您的服务器日志中有一个(单哈希)密码列表。这些不是明文密码,但不是密码文件中的双哈希密码。但是假设他对您的客户机做了一个小小的更改:他取出bcrypt()行,这样它就不再散列他在发送之前粘贴到password字段中的内容:相反,它只发送原始文本。 然后他开始发送登录信息。现在您的服务器可以看到用户名和单哈希密码(因为这是bob键入的,因为这是bob知道的)。它假设这是通常的客户机,所以它会再次散列密码,并检查其文件中的双重散列密码…而且它被精确地散列了两次,所以匹配。鲍勃不知道明文密码,但通过修改客户端,他做到了,所以他不知道 需要 知道它。 |
|
|
Michael · 某些Windows客户端上的命名管道安全问题 2 年前 |
|
|
adamency · 是否可以从Go二进制文件的源代码中检索字符串? 2 年前 |
|
|
AlboSimo · PayPal Api密钥安全 2 年前 |