请耐心等待,我只学了几个星期的PHP,所以示例代码可能会让我感到困惑。我想我终于能理解腌制了!这是为了保护数据库中的密码,如果被攻破了。
我不明白的是,如果黑客试图破解用户的密码(假设这是他们的目标),为什么他们必须破解哈希?这不是更简单吗?对密码猜测的唯一防御是实施一天输入X次密码的限制还是验证码?
首先,数据库是如何被黑客入侵的?是更多的密码猜测,还是可以通过MySQL注入获得哈希?
谢谢!
发布于 2010-07-15 05:50:14
是的,加盐是为了防止密码被反转成明文。它还可以防止有人说“站点A上的加密密码与站点B上的相同,因此用户在这两个地方都有相同的密码”。
这不仅仅是为了保护用户免受黑客的攻击;也是为了保护他们免受您的攻击。
是的,对密码猜测的唯一防御是放慢或禁止重复尝试。大多数验证码都是易碎的或坏的,您不能对拥有原始数据库副本的人强加验证码或猜测限制。因此,即使是加密的数据也不会落入恶意个人手中。不要让它们出现在您的.htpasswd或/etc/shadow文件或数据库中。
如果您没有使用salt,那么(提前)生成一个彩虹表要比直接猜测一个非常强的密码容易得多。关键是构建反向映射hash->password只需一次,对于拥有彩虹表的任何人来说,(无盐的) hash将永远失效。
如果您的提供商受到攻击,如果您的代码中存在注入漏洞,如果您的DB用户帐户密码被猜测出来,如果您的提供商使用eBay出售(假定擦除)硬盘上有您的数据库的三年副本,那么数据库可能会被黑客攻击……它可能会以多种方式发生。
发布于 2010-07-15 05:49:43
加盐和散列的想法是为了保护密码,以防数据库被泄露,无论是通过SQL注入、缓冲区溢出攻击,还是简单地去服务器机房并将磁盘从服务器中取出。加盐不会保护您免受密码猜测,但有助于防止攻击者获取数据。
发布于 2010-07-15 05:58:34
这可能很愚蠢,但许多人在不同的网站上使用相同的密码。如果你的数据库被攻破,密码被简单地散列,那么黑客可以使用一些技术(例如彩虹表,甚至几个网站)来找到导致相同散列的密码值。然后,该密码可用于尝试访问该用户拥有帐户的其他站点。
如果数据库中的密码是加盐的,那么这将变得非常困难……如果其他网站也在他们的密码中添加不同的盐,那么对黑客来说就变得不切实际了。
https://stackoverflow.com/questions/3250789
复制相似问题