如果黑客可以访问我的数据库中的哈希值,那么无论如何他都可以访问数据库中的其余信息.那么为什么他会费心去解密密码呢?我应该将密码存储在不同的服务器上以保存我的其他数据吗?这是我可以设想它有用的唯一场景.
有时,黑客无法完全访问您的数据库.有时他们会发现一个小的SQL注入漏洞或其他人没有正确编码的弱点,因此他们最初只能做一些简单的事情,比如一次打印一个数据库单元.如果他们能够打印出真正的密码,那么事情就会变得更糟.
事情发生了:备份磁带丢失,意外丢失或被盗.一个退休的系统没有被正确擦除.其他地方的违规行为会导致数据库意外泄露.如果黑客可以访问这样的快照,他可以了解很多关于你的系统的知识.但是,如果密码仍然是哈希,他也不能使用系统来做恶意的事情,比如以不同的用户身份登录并开始更改内容.
我听说大多数黑客都是内部工作.最好删除您信任的人以其他人身份登录的能力.
这不仅仅是你.用户倾向于跨系统共享密码.也许有一天(上帝保佑)你有一个与密码无关的漏洞,但在这个漏洞的过程中你的身份验证表将成为攻击者的目标之一.如果您以纯文本形式存储密码,那么您也只是在许多其他服务上破坏了用户帐户,而您非常糟糕的一天变得非常糟糕.
如果您认为这种事情没有发生,请与reddit的人谈谈.
人们经常对其他网站上的不同帐户使用相同的用户名/密码(包括例如在线访问银行帐户).
一旦你发现了这个黑客并保护了你的数据库,黑客仍然可以登录你用户的帐户.
最佳安全实践建议:
您应该为每个帐户使用唯一(userId,密码)对.但大多数人使用一对来获取许多资源(电子邮件,银行等).攻击者可以从一个资源中窃取它们并使用它们访问另一个资源.用盐哈希密码- 见http://en.wikipedia.org/wiki/Salt_(cryptography) -防止这种攻击.
您应该加密数据库中的所有敏感数据,而不仅仅是密码.你有人可能窃取你的整个数据库(或你的服务器)是完全有效的.
您应该将Web服务器与数据库和任何其他宝贵资源分开,以将攻击隔离到最不重要的资产.
哈希密码也有商业原因.请记住,散列意味着您不会将用户的密码存储在设备的任何位置.
根据适用的法律,您可能需要在某些情况下执行此操作.
如果您的数据被盗,您可以大大减少曝光率.
您对社交工程攻击更安全,攻击者冒充有效用户并哄骗员工泄露密码.见http://en.wikipedia.org/wiki/Social_engineering_(security).