2010-08-24 210 views
5

我正在构建一个项目,它有一个非常基本的登录系统。将没有注册系统可用,用户将被手动添加。我也很好地保护了数据库数据输入门。因此,毕竟,我是否仍然需要散列,甚至用户密码?我真的需要散列密码吗?

如果你的答案是肯定的,下一个问题是为什么?

+4

您必须始终假定您的系统可能会受到攻击,并且攻击可能会读取您的数据库。然后考虑后果。即使你做的都是正确的,这已经够糟的了,但如果你存储了简单的密码,那么后果将远远超过“正义”系统。 – 2010-08-24 09:08:23

+2

作为一般规则,适应良好实践是非常重要的,那些容易实现的。如果你认为,*这是一个简单的项目,为什么要关心?*,你会习惯于潦草的编码,最终你会在所有情况下忽略这种做法。 – 2010-08-24 09:20:45

+0

“我还很好地保护了数据库数据输入门”:您是否还保护访问数据库的所有其他可能性?它是否受到系统管理员,您的托管服务提供商,攻击您的前端的黑客,备份安全等等的保护。通过实施简单的哈希可以避免许多其他问题。 – 2010-08-24 09:29:09

回答

7

如果您为每个用户生成密码并且不让用户更改密码,那么您可以提出一个不散列它们的方法。

但是:

  • 你将不得不解释给大家,审计为什么你不散列密码系统。
  • 您必须有某种方式证明系统管理员没有查看用户密码,然后以用户身份登录。
  • 很多程序员会认为你不知道你在做什么。
  • 如果系统在某个时刻发生了更改,或者代码被复制到另一个系统中,该怎么办?

我觉得这就像过马路。

即使 绿人说可以跨越,您总是会看到两种方式。

(这是更快地朝两边看,然后再解释任何看孩子等等,为什么你不需要在这种情况下)

+0

谢谢,这是我想要得到的一点,但是'如果'句子足够糟糕,所以散列很酷:D – gkaykck 2010-08-24 15:34:26

2

是的,因为你的数据库仍然存在,没有注册表单的用户系统及其数据库不会比一个用户系统更难妥协。

即使您很好地保护了您的“数据库数据输入门”,您的数据库仍然不是100%的攻击者。如果有人仍然设法通过防御措施并查看数据库中的所有内容,并且所有密码均为纯文本,则用户的帐户仍然受到威胁。通过对它们进行哈希处理,至少可以让攻击者花费更多时间,同时保护您的用户。

2

是的,因为,例如,有权访问数据库的人员可以轻松地模拟其他用户。

11

那么,入侵者能够冒充另一个用户会有什么后果呢?在加入哈希和腌制的难度(这不是很好)上衡量这些后果。

您可能要考虑的一个风险是,如果用户在多个站点上拥有相同的密码,那么他们的安全性与最弱的站点一样安全。即使您自己手动分配密码(并且不允许用户选择密码),他们也可能继续在其他站点使用相同的密码。

+1

,因为用户倾向于重复使用他们的密码,这也是为了模拟其他站点/系统上的用户 - 只有当密码不是自动生成的时候。 – sfussenegger 2010-08-24 09:10:15

+4

@sfussenegger:我在第二段中的观点是,即使在* this *网站上自动生成密码,用户仍然可以在另一个网站上重复使用密码。 – 2010-08-24 09:12:34

8

绝对。这是您必须尊重的用户最重要的义务之一 - 非常谨慎地对待他们的个人数据。

+3

这不仅是值得尊重的东西,也是许多国家法律规定的东西。 – 2010-08-24 09:18:53

+2

我想如果你的原则甚至超过法律要求是很好的。 – 2010-08-24 09:33:45

1

是的,因为总会有损害数据库的风险。请记住,很多人对许多网站,即时消息等使用相同的密码,因此您不仅为系统中的信息冒险。

1

人们使用相同的密码不仅仅是您的网站以及。如果攻击者获取密码,那么比您的网站有更多的后果。该用户的电子邮件,银行账户等也可能受到影响。做勤奋的事情。

5

在某些辖区/行业,以纯文本格式存储登录凭据可能违反了数据保护法律。如果你在美国这样一个与医疗或财务记录有丝毫关系的系统上做类似的事情,并且你接受了审计,即使没有违规,如果发生最糟糕的事情,你也会幸运的在您的系统通过审核之前,您的客户和供应商拒绝与您做生意。也可能有巨额罚款。即使你的系统并不是使用敏感数据,如果它打算供那些经常使用这些数据的人使用,那么他们可能重用也用于访问受管数据的密码的可能性至少会使审计员非常紧张,并且让他们的客户非常不愿意与您合作,即使您在技术上符合规定。

+0

哇,这很好,谢谢 – gkaykck 2010-08-24 09:27:26

+0

同样的观点也适用于英国 - 可能欧盟的要求,不记得了。 – RYFN 2010-08-24 15:47:38

1

为什么你不会哈希密码?它可以保护您,您的员工和您的用户,并且几乎不需要执行任何操作。用户有权期望您的系统管理员/ DBA /谁不能看到他们的密码,并且您的管理员有权不必要地泄露这些信息。在任何内部/外部技术安全审计中,审计人员要做的第一件事情之一就是在数据库中的任何密码栏中输入内容,并确定它们是否被散列。

0

而且我保护的数据库中的数据输入门非常好。

我敢打赌,每个系统设计者/管理员对于计算历史中的每个受损口令文件都认为是同一件事。