MySQL和用户身份验证-内部查询与事后查询的有力证据



这是一个很容易的问题,但我觉得我从来没有听到过关于这一点的"官方"裁决,也许是因为这无关紧要,也可能是因为它太明显了,我只是错过了它。

因此,在我看来,有三种选择:

  1. 在MySQL查询中检查用户/密码(假设所有内容都经过了消毒和/或准备,密码都经过了加盐和散列处理):

    SELECT COUNT(username) FROM users WHERE user = '$user' && pass = '$pass';
    
  2. 查询用户/密码和签入代码:

    SELECT user, pass FROM users WHERE user = '$user';
    
  3. 其他我完全不知道的事情,我应该做。

有明确的理由选择1或2吗?如果有3,我洗耳恭听。

我认为#2的版本是最好的——大多数情况下,你会想了解用户的其他信息(例如唯一ID、他们的全名或应用程序中可能相关的任何信息),所以一旦他们成功通过身份验证,你就必须再进行一次查询。

我不知道你是在MySQL中还是在应用程序代码中检查身份验证——这取决于你在哪里进行哈希/解密/其他什么,只需要安全有效。

如果您在查询中作为身份验证步骤的一部分读取了信息,那么您就可以获得以后所需的所有信息。如果查询失败或没有给你预期的密码哈希,你可以处理它,不会造成任何伤害。

相关内容

  • 没有找到相关文章