2010-07-14 80 views
2

忍耐我,我一直只学习PHP只有几个星期,所以示例代码可能会让我困惑。我想我终于明白了腌制!这是为了保护数据库内的密码,如果违反。数据库如何被黑客攻击?关于腌制等的问题

我不明白的是,黑客为什么必须破解哈希,如果他们试图找出用户的密码(假设这是他们的目标)?这不容易吗?密码猜测的唯一防御措施是实现密码输入的限制X每天的次数或CAPTCHA?

如何将一个数据库中获取摆在首位黑客攻击?是更多的密码猜测或哈希可以通过MySQL注入获得?

谢谢!

+2

当你说“这不容易吗?”你指的是什么? – 2010-07-14 21:49:47

+0

在盐渍哈希:http://stackoverflow.com/questions/1645161/salt-generation-and-open-source-software/1645190#1645190 – Jacco 2010-07-14 22:08:27

+0

“这不会更容易吗?”指之前的陈述。尝试通过暴力破解密码而不是尝试获得散列是不是更容易? – Tarik 2010-07-15 15:25:38

回答

3

是,腌制是为了防止密码将永远不能逆转成明文。它还会阻止某人说“站点A上的加密密码与站点B上的加密密码相同,因此用户在两个地方都有相同的密码”。

这不仅仅是为了保护用户免受黑客攻击;这也是为了保护他们免受

是,对密码猜测的唯一办法就是减慢或禁止反复尝试。大多数CAPTCHA是易碎的或破损的,您不能对拥有原始数据库副本的人施加CAPTCHA或猜测限制。因此,即使加密数据不受恶意个人的影响。不要让他们在.htpasswd或/ etc/shadow文件或数据库中。

如果你不使用盐,产生彩虹表(提前)比直接猜测一个非常强壮的密码容易得多。关键是建立反向映射hash->密码可以完成一次,并且(无盐)散列对于拥有彩虹表的任何人都是永远破碎的。

如果您的提供商遭到入侵,您的代码中存在注入漏洞,如果您的数据库用户帐户密码被猜出,如果您的提供商使用eBay销售(假定已擦除)硬盘驱动器有一个三年的数据库的副本......它可以发生在很多方面。

+0

盐针对计算前计算攻击(彩虹表)加强哈希,而不是针对“反转成明文”(哈希(无论是否是盐)无法逆转)。此外,生成彩虹表与打破单个密码一样昂贵。但是,在计算了彩虹表之后,可以在表中查找散列并快速找到匹配的输入。 – Jacco 2010-07-14 22:19:32

+0

@Jacco:如果你有一个彩虹表,你可以将一个散列映射成(一些匹配的)明文。因为用户倾向于选择低复杂度的密码并且哈希空间很大,所以您找到的明文几乎总是用户的密码。所以不,腌制是为了防止通过彩虹表反转成明文。而且,正如我所说,产生彩虹表的原因比打破单个密码更容易,因为彩虹表可以事先创建。 – Borealid 2010-07-14 23:00:25

4

盐渍和散列的思想是保护数据库已经受损的情况下,密码,无论是通过SQL注入,缓冲区溢出攻击或直接转至服务器机房和拉盘出你的服务器。 Salting不会保护您免于密码猜测,但可帮助防止攻击者获取数据。

1

这里的关键在于,他们并没有试图获取用户的密码以便在您的网站上使用,尽管在修复了可能有用的漏洞之后。这是因为,无论出于何种原因,如果您的网站遭到入侵,则不会对用户造成任何损害。人们倾向于复制密码;那会很糟糕。

1

这可能是愚蠢的,但很多人对不同的网站使用相同的密码。如果您的数据库遭到破坏并且密码被简单地散列,那么存在黑客可以使用的技术(例如彩虹表,甚至一些网站)来查找导致相同散列的密码值。然后可以使用该密码尝试访问用户拥有帐户的其他网站。

如果数据库中的密码腌制,那么这将成为显著困难......如果其他网站也食盐他们的密码与不同的盐到你的话,那就不切实际的黑客。