【问题标题】:How to use the case-sensitive for MySQL password field?如何使用区分大小写的 MySQL 密码字段?
【发布时间】:2012-01-18 09:42:53
【问题描述】:

我有用户登录,但用户可以使用不区分大小写的方式登录意味着如果您的密码是“测试”,那么用户可以使用“测试”密码登录。
我想避免在我的密码字段上进行这种类型的身份验证。

【问题讨论】:

    标签: php mysql passwords


    【解决方案1】:

    最简单的方法是在查询中使用binary 关键字:

    SELECT /*fields*/ FROM table WHERE /* where clause */ BINARY password = "userpassword"
    

    在您的 PHP 代码中使用 strcmp

    如果您存储我推荐的散列或加密密码,您也可以使用它。

    【讨论】:

      【解决方案2】:

      我猜你是在明文存储密码。这不仅非常不安全,而且在大多数情况下也是不必要的。我的建议是将密码存储在两列中,例如:

      password_salt VARCHAR(16)
      password_hash VARCHAR(40)
      

      在存储新密码之前,获取用户提供的密码 ($clear_password),创建一个随机字符串 ($salt) 并使用两者创建一个哈希 (sha1sum($salt . $clear_password)。存储盐和哈希并丢弃清除密码。

      要验证密码,请为给定用户检索存储的盐,生成哈希并查看它是否与数据库中的哈希匹配。

      这种技术称为salted passwords

      【讨论】:

      • 感谢您的及时回复,这是安全风险的好主意
      • @SKu 请先阅读此内容 - codahale.com/how-to-safely-store-a-password。使用 sha1 是不够的。
      • 有利于安全,但不需要对问题做任何事情吗?
      • @Joel - 我的回答消除了二进制匹配的需要。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 2017-04-15
      • 1970-01-01
      • 1970-01-01
      • 2010-10-28
      • 2014-07-19
      • 1970-01-01
      相关资源
      最近更新 更多