这是一个很容易的问题,但我觉得我从来没有听到过关于这一点的"官方"裁决,也许是因为这无关紧要,也可能是因为它太明显了,我只是错过了它。
因此,在我看来,有三种选择:
-
在MySQL查询中检查用户/密码(假设所有内容都经过了消毒和/或准备,密码都经过了加盐和散列处理):
SELECT COUNT(username) FROM users WHERE user = '$user' && pass = '$pass';
-
查询用户/密码和签入代码:
SELECT user, pass FROM users WHERE user = '$user';
-
其他我完全不知道的事情,我应该做。
有明确的理由选择1或2吗?如果有3,我洗耳恭听。
我认为#2的版本是最好的——大多数情况下,你会想了解用户的其他信息(例如唯一ID、他们的全名或应用程序中可能相关的任何信息),所以一旦他们成功通过身份验证,你就必须再进行一次查询。
我不知道你是在MySQL中还是在应用程序代码中检查身份验证——这取决于你在哪里进行哈希/解密/其他什么,只需要安全有效。
如果您在查询中作为身份验证步骤的一部分读取了信息,那么您就可以获得以后所需的所有信息。如果查询失败或没有给你预期的密码哈希,你可以处理它,不会造成任何伤害。