我应该在类的内部还是外部散列密码?

时间:2013-05-17 13:01:03

标签: php security hash login passwords

我有一个名为User的类,用于存储用户信息。我在创建帐户时存储的一个字段(否则不存储在类中)是哈希密码。

密码通过from从用户在POST中创建帐户到另一个页面进行传递,以便通过MYSQL数据插入等进行处理。

我的问题是,我应该将原始$_POST['password']字段传递给类并在类中散列它,还是应该在外部散列密码并将散列传递给类进行存储?

我看不出任何真正的正负值来摆动我。我永远不会在数据库中调用密码哈希来在用户类中使用(我不会使用用户类进行登录验证)。

3 个答案:

答案 0 :(得分:3)

取决于您是否也使用HTTPS连接。如果是这样,您可以将密码哈希到代码中,因为它不会被看到。 使用Javascript哈希密码需要一些代码(因为没有直接在MD5或SHA1中散列的函数)

就像Zsolt说的那样,将它哈希到你的班级允许使用盐机制。

答案 1 :(得分:2)

没有安全隐藏传递您的类纯文本密码。重要的是在永久保存之前将其哈希。 (请记住:将会话数据保存到会话中是永久性的。) 该类及其所有数据仅供输入明文密码的用户使用。

我建议在课堂上这样做:这使你能够在中心位置添加腌制和其他机制。

请记住,您将在注册过程中对密码进行其他检查:最小长度,允许的字符数等。因此,哈希必须在所有这些之后发生。由于您希望能够同时启用COntroller和Model来添加更多检查,因此您需要在最新的位置进行散列:在$ user-> save()或ORM类中使用(如果使用的话)。

最好的问候。

答案 2 :(得分:0)

你说对了,两种解决方案都很好。除非你使用某种惯例,否则你应该坚持下去。在任何情况下,您编写代码的方式都会更加重要。因此,即使是在一段时间后你也会更容易阅读它。