【问题标题】:Should I hash a password inside or outside of a class?我应该在班级内部还是外部散列密码?
【发布时间】:2013-05-17 13:01:03
【问题描述】:

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

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

我的问题是,我应该将原始的$_POST['password'] 字段传递给类并在类内部对其进行哈希处理,还是应该在外部对密码进行哈希处理并将哈希传递给类进行存储?

无论哪种方式,我都看不到任何真正的正负。我永远不会从数据库中调用密码哈希以在用户类中使用(我不会使用用户类进行登录验证)。

【问题讨论】:

  • 只是不要要求数据库服务器对其进行哈希处理。

标签: php security hash login passwords


【解决方案1】:

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

就像 Zsolt 所说,将其散列到您的类中允许使用盐机制。

【讨论】:

    【解决方案2】:

    传递您的班级纯文本密码没有安全隐患。重要的是在永久保存之前对其进行哈希处理。 (请记住:将其保存到会话中是永久性的,因为会话数据已保存到磁盘。) 该类及其所有数据仅对输入纯文本密码的用户显示。

    我建议在课堂上进行:这使您能够在中心位置添加盐渍和其他机制。

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

    最好的问候。

    【讨论】:

      【解决方案3】:

      你是对的,两种解决方案都很好。除非您使用某种约定,否则您应该遵守它。无论如何,更重要的是你在编写代码的方式上有所作为。所以它会更容易阅读,即使是你一段时间后。

      【讨论】:

        猜你喜欢
        • 2011-08-09
        • 1970-01-01
        • 2011-08-06
        • 2021-01-05
        • 2019-09-23
        • 2014-10-28
        • 2018-06-30
        • 1970-01-01
        • 2010-09-20
        相关资源
        最近更新 更多