【问题标题】:PHP Forms - Which input is incorrect?PHP 表单 - 哪个输入不正确?
【发布时间】:2012-08-29 19:15:35
【问题描述】:

如果我有疑问,

SELECT (...) FROM User WHERE Username = (...) AND Password = (...);

如果用户输入了无效的用户名,有没有办法确定具体是用户名不正确?

这样我可以向用户提供更具体的错误消息,例如“用户不存在”等...

【问题讨论】:

  • 出于安全原因,这是个坏主意。如果你说用户存在,那么他们就有了一块拼图。
  • 不要那样做。如果您明确告诉用户该用户名不存在,那么您将自己打开以进行暴力攻击。
  • 这可能是个坏主意。一旦恶意用户锁定“有效的用户名,无效的密码”,你就为他们完成了一半的工作。
  • 我已经考虑过了,谢谢
  • 另外,我们应该做出强制性的“请接受更多答案”评论。 13 个中有 2 个对您的事业没有帮助:-)

标签: php forms error-handling


【解决方案1】:
SELECT COUNT(*) AS `count` FROM `User` WHERE `Username` = ...;

if( $result['count'] < 1 )
{
  // no user
}

// repeat for pass.

【讨论】:

  • 是的,这就是它的实现方式,但正如所说,出于安全原因,这是一个坏主意。
  • @j5Dev:虽然我不反对,但它仍然是对所提出问题的正确解决方案。
【解决方案2】:

如果密码匹配,我会选择用户名,然后选择一个位字段。所以从 WHERE 子句中删除密码部分,并将其移动到 SELECT 子句中。然后,没有匹配的行意味着用户名无效,如果有一行,则需要检查该字段以查看密码是否匹配。

SELECT (...) IF(password=?, 1, 0) as success
FROM User
WHERE Username = ? 

【讨论】:

    【解决方案3】:

    如果您坚持要这样做,您可以这样做:

    SELECT password FROM user WHERE username = ?
    

    如果没有找到记录,则用户名不存在。如果是,您现在可以比较密码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 2012-12-31
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多