php - 最安全的php用户认证功能

标签 php mysql security authentication

创建安全用户身份验证功能的最佳方法是什么?下面是 PHP 函数的核心,它接收用户名和密码并根据数据库进行检查。

我对查询及其返回值特别感兴趣。使用“else if($query1)”是验证和设置 session 变量的最佳方法吗?另外,最好为 session 变量设置什么值?电子邮件地址、用户名、 bool 变量、主键索引等?

$query1 = mysql_fetch_array(mysql_query("SELECT primaryKey 
                                           FROM loginInfo 
                                          WHERE email = md5('$email') 
                                            AND password = md5(CONCAT('$password',salt)) 
                                          LIMIT 1"));
if (!$query1)
  return false;
else if ($query1) {
  $_SESSION['userNumber'] = $query1[primaryKey];
  return true;
}
else
  return false;

最佳答案

MD5 存在已知漏洞,不再被认为是安全的。您应该切换到更强的哈希值,例如 SHA-2 .

此外,$query1 只能计算为 true 或 false,因此最后的 else 部分是无用的,并且永远不会到达。您的 3 个分支相当于:

if (!$query1)
    return false;
else { // else $query1 is obviously true
    $_SESSION['userNumber'] = $query1[primaryKey];
    return true;
}

session 中不存在要存储的“最佳值”,但主键通常是一个方便的选择,因为它保证是唯一的,并且还提供了一种查找剩余详细信息的简单方法。此外,如果您发现自己经常显示某些信息(例如用户名),您还可以将其存储在 session 中以便于访问。

关于php - 最安全的php用户认证功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4231075/

相关文章:

php - 如何在数据库中存储多语言网站信息?

pdo 的 PHP oop 错误 - 调用非对象上的成员函数 prepare()

mysql - 阻止访问自托管 mysql 服务器上的数据库

php - 使用 PHP 显示 SQL 数据库中存储的 URL 中的图像

security - Oracle Apex 中的授权和用户角色?

php - 我可以用这段代码被黑吗?

java - 如何使用java生成许可证 key

php - 如何使用 cURL 从网站获取特定数据,然后使用 php 将其保存在我的数据库中

java - 图像 url 将 null 值传递给另一个 Intent

mysql - 有没有办法将 backup.sql 文件导入到空数据库并跳过某些列