IaC*_*der 26 security client-side
如果您要在将用户密码发送到线路之前对其进行哈希处理并将其保留为内存中的纯文本,这是否会提高应用程序的安全性?
我认为这可以通过保护存储在客户端内存中的数据来减轻一小部分漏洞.但实际上,如果我们担心有人在阅读客户的记忆,那么可能存在我们无法解决的更大问题.
在客户端有一些对哈希感觉不正确的事情.
客户端密码散列是否常见?这样做还有其他优点或缺点吗?
编辑:鉴于通信渠道是安全的(SSL).在什么条件下使用这种方法是可以接受和值得的.我问这个是因为"安全专家"建议我在某些应用程序功能中使用这样的方案.
geo*_*car 19
没有.
当客户端发送的东西,无论是P或H(P)或H(H(P))任何人谁截取这可以简单地重新发送同样的事情,从而使这样的等同于直接使用密码的功能.
这就是你应该使用随机数的原因; 服务器可以发出一些随机垃圾k,客户端将计算H(P,k)并将其发送到服务器.HMAC是这种方法的流行实现.
如果服务器从不接受两次相同的nonce,这对于重放攻击是安全的.
moo*_*dow 14
哈希与您描述的场景中的安全POV的密码相同:如果我拦截哈希,我不需要知道密码,我可以向服务器发送我截取的哈希值.
认证协议有一定的篇幅可以避免这个问题; 安全性很难,你最好选择和实现一个易于理解的协议,而不是自己动手.
如果您的流量通过SSL,您可以安全地拦截并且散列为您提供额外的好处.
Dav*_*ley 14
发送散列密码不会提高您网站的安全性,正如其他人所指出的那样(因为您接受哈希密码,所有坏人需要知道的是哈希版本).它也不是很安全,因为坏人可能会加载你的登录页面并检查部署的Javascript或Java.
它所做的是阻止有人看到数据包能够提取密码,这是适度有用的.许多人在多个站点上使用相同的密码(除了安全性较高的站点之外,我都使用相同的密码),因此如果您可以从中获取一个密码,则可以登录其他站点上的其他帐户.
它还可以防止真实密码在您的网站上存储,甚至暂时存储,如果您的网站遭到入侵,这可能会提供额外的安全性.
因此,虽然我认为用户端散列可能是一件好事,但是不值得花费更多的麻烦.
而且,正如其他人告诉你的那样,不要自己动手.有太多可能出错的事情.你几乎不会像练习的坏人那样快速地注意到它们.
小智 12
是的你应该.
IEEE有一个数据泄露,其中100K电子邮件和密码从博客中暴露出来.
显然,IEEE不应该暴露他们的博客!但如果他们在客户端窃取了密码,那就不会那么糟糕了.
作为第一个答案,您应该使用随机数.如果你使用足够长的nonce(例如128位),你实际上不需要担心重用,因为服务器永远不会要求两次相同的nonce(假设正确播种的CRNG等).
不,客户端的散列不能完全保护密码.当一个人选择在客户端散列密码时,提交给服务器的摘要基本上就成了密码.如果部署SSL,这本身不是问题.
但是,这种方案最终会产生比解决的问题更多的问题.如果服务器将客户端提交的哈希值与数据库中存储的哈希值进行比较而不执行任何进一步的加密操作(尤其是对输入数据进行哈希处理),则密码以明文形式存储以用于所有实际目的.任何有权访问存储哈希的人都可以将其重新提交给服务器并获得对帐户的访问权限.
简单来说,如果提交的哈希(与提交的哈希相同)是通过应用程序中的任何其他漏洞泄漏(例如,通过SQL注入),那么应用程序就会有一个漏洞,其中不足以保护密码.
如果必须修复底层漏洞,则必须将提交的哈希值作为明文密码处理,然后在与存储的哈希值进行比较之前对其进行哈希处理(最好使用salt).
| 归档时间: |
|
| 查看次数: |
8574 次 |
| 最近记录: |