请耐心等待,我只学习 PHP 几个星期,所以示例代码可能会让我感到困惑。我想我终于明白加盐了!这是为了保护数据库内部的密码,如果被破坏。
我不明白的是,如果黑客试图找出用户的密码(假设这是他们的目标),为什么还要破解哈希?这不是更容易吗?密码猜测的唯一防御措施是每天限制输入密码 X 次还是 CAPTCHA?
数据库如何首先被黑客入侵?是更多的密码猜测还是可以通过MySQL注入获得哈希?
谢谢!
请耐心等待,我只学习 PHP 几个星期,所以示例代码可能会让我感到困惑。我想我终于明白加盐了!这是为了保护数据库内部的密码,如果被破坏。
我不明白的是,如果黑客试图找出用户的密码(假设这是他们的目标),为什么还要破解哈希?这不是更容易吗?密码猜测的唯一防御措施是每天限制输入密码 X 次还是 CAPTCHA?
数据库如何首先被黑客入侵?是更多的密码猜测还是可以通过MySQL注入获得哈希?
谢谢!
加盐和散列的想法是保护密码,以防数据库遭到破坏,无论是通过 SQL 注入、缓冲区溢出攻击还是仅仅通过进入服务器机房并将磁盘从服务器中拉出。加盐不会保护您免受密码猜测,但有助于防止攻击者获取数据。
是的,加盐是为了防止密码被反转为明文。它还阻止某人说“站点 A 上的加密密码与站点 B 上的加密密码相同,因此用户在两个地方都具有相同的密码”。
这不仅仅是为了保护用户免受黑客攻击;这也是为了保护他们免受您的侵害。
是的,对密码猜测的唯一防御是减慢或禁止重复尝试。大多数 CAPTCHA 都是易碎或损坏的,您不能对拥有原始数据库副本的人施加 CAPTCHA 或猜测限制。因此,即使是加密数据也不要落入恶意个人之手。不要让它们出现在您的 .htpasswd 或 /etc/shadow 文件或数据库中。
如果你不使用 salt,生成彩虹表(提前)比直接猜测一个非常强的密码要容易得多。关键是构建反向映射 hash->password 可以一次完成,并且(未加盐的)哈希对于任何拥有彩虹表的人来说都永远被破坏了。
如果您的提供商遭到入侵,如果您的代码中存在注入漏洞,如果您的 DB 用户帐户密码被猜到,如果您的提供商使用 eBay 出售(假定已擦除)具有三个-的硬盘驱动器,则数据库可能会被黑客入侵一年前的数据库副本就可以了...它可以通过多种方式发生。
这可能很愚蠢,但许多人对不同的网站使用相同的密码。如果您的数据库遭到破坏并且密码被简单地散列,那么黑客可以使用一些技术(例如彩虹表,甚至一些网站)来找到导致相同散列的密码值。然后,该密码可用于尝试访问用户拥有帐户的其他站点。
如果您的数据库中的密码被加盐,那么这将变得更加困难......并且如果其他网站也用与您不同的盐对他们的密码进行加盐,那么这对黑客来说变得不切实际。
这里的关键是他们不会尝试获取用户的密码以在您的网站上使用,尽管在您修复了可能有用的漏洞之后。这样一来,无论出于何种原因,您的网站遭到入侵,都不会对您的用户造成损害。人们有重复密码的倾向;那会很糟糕。