这确实是理所当然的事情,但我觉得我从未听过对此的“官方”裁决,也许是因为这并不重要,或者也许是因为它太明显了,而我只是错过了。
所以我认为有三个选择:
检查 MySQL 查询中的用户/密码(假设所有内容都已清理和/或准备好,并且密码已加盐和散列存储):
SELECT COUNT(username) FROM users WHERE user = '$user' && pass = '$pass';
查询用户/密码并 checkin 代码:
SELECT user, pass FROM users WHERE user = '$user';
还有一些我完全不知道但应该做的事情。
是否有明确的理由选择 1 或 2,如果有 3,我洗耳恭听。
最佳答案
我认为 #2 的版本是最好的 - 大多数情况下,您会想了解有关用户的其他信息(例如唯一的 ID,或他们的全名,或与您的应用程序相关的任何信息) )因此,一旦身份验证成功,您就必须执行另一个查询。
我不知道您是否在 MySQL 或应用程序代码中检查身份验证 - 这取决于您在何处进行散列/解密/其他操作,并且只需要安全且工作即可。
如果您在查询中的身份验证步骤中读入信息,那么您就已经获得了稍后所需的所有信息。如果查询失败或没有提供您期望的密码哈希值,您可以处理它并且不会造成任何损害。
关于php - MySQL 和用户身份验证 - 内部查询与查询后的有力证据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966624/