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

标签 php mysql security authentication

这确实是理所当然的事情,但我觉得我从未听过对此的“官方”裁决,也许是因为这并不重要,或者也许是因为它太明显了,而我只是错过了。

所以我认为有三个选择:

  1. 检查 MySQL 查询中的用户/密码(假设所有内容都已清理和/或准备好,并且密码已加盐和散列存储):

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

    SELECT user, pass FROM users WHERE user = '$user';
    
  3. 还有一些我完全不知道但应该做的事情。

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

最佳答案

我认为 #2 的版本是最好的 - 大多数情况下,您会想了解有关用户的其他信息(例如唯一的 ID,或他们的全名,或与您的应用程序相关的任何信息) )因此,一旦身份验证成功,您就必须执行另一个查询。

我不知道您是否在 MySQL 或应用程序代码中检查身份验证 - 这取决于您在何处进行散列/解密/其他操作,并且只需要安全且工作即可。

如果您在查询中的身份验证步骤中读入信息,那么您就已经获得了稍后所需的所有信息。如果查询失败或没有提供您期望的密码哈希值,您可以处理它并且不会造成任何损害。

关于php - MySQL 和用户身份验证 - 内部查询与查询后的有力证据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9966624/

相关文章:

php - 重定向到子域的规则

mysql - 对未知数量的字段求和

security - 尽管已配置证书,但 HTTPS 连接显示不安全标志

php - if 语句或 while 循环在 php 中对我失败

php - 哪种方式在数据库中存储和处理大量数据是合法的?将所有内容存储在一张表中还是通过 id(属性)为每个表创建新表?

java - 如何在 android 中循环 json 数组?

mysql - 如何在两个镜像列中查找 mysql 重复项

仅当字段具有特定值时才加入mysql

ios - 在 iOS 上使用 SecCertificateCreateWithData 创建证书

api - 将 FOSOAuthServerBundle 与 FOSUserBundle 集成