Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用密码验证PHP用户名和密码_Php_Mysql_Passwords - Fatal编程技术网

使用密码验证PHP用户名和密码

使用密码验证PHP用户名和密码,php,mysql,passwords,Php,Mysql,Passwords,我正在尝试更新我的不安全登录系统。但是,无法理解如何合并if(password_verify..命令 任何帮助都将不胜感激 //Create query $qry="SELECT * FROM user WHERE username='$username' AND password='$password'"; $result=mysql_query($qry); if($result) { if(mysql_num_rows($result) > 0) { //IF Log

我正在尝试更新我的不安全登录系统。但是,无法理解如何合并if(password_verify..命令

任何帮助都将不胜感激

//Create query
$qry="SELECT * FROM user WHERE username='$username' AND password='$password'";
$result=mysql_query($qry);
if($result) {
    if(mysql_num_rows($result) > 0) {
    //IF Login Successful
        session_regenerate_id();
        $user = mysql_fetch_assoc($result);
        $_SESSION['SESS_USER_ID'] = $user['user_id'];
        $_SESSION['SESS_FIRST_NAME'] = $user['username'];
        $_SESSION['SESS_LAST_NAME'] = $user['password'];
        session_write_close();
        header("location: home.php");
        exit();
    }else {
        //IF Login failed
        $errmsg_arr[] = 'user name and password not found';
        $errflag = true;
        if($errflag) {
            $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
            session_write_close();
            header("location: index.php");
            exit();
        }
    }

以下是您问题的答案和一些一般信息:

密码验证功能:

一个好的做法是在存储敏感数据之前对其进行加密。由于您不希望恶意用户能够检索密码,因此将使用一个非对称的(单向)加密算法系列,我们称之为散列

您将使用输入的值重新生成哈希,并将其与存储在数据库中的值进行比较,从而检查用户是否为您提供了正确的凭据

在这种情况下,您不会在查询中插入任何用户输入

您可以通过添加一个

文档非常明确,您将在本文中发现有关哈希算法的讨论

帐户创建/密码更改步骤:

  • 计算用户的密码哈希
  • 将其存储在数据库中
要总结身份验证步骤,请执行以下操作:

  • 检索到用户输入
  • 调用password\u verify($user\u password\u inputed,$hash\u retrieve\u from\u db)函数
  • 如果函数返回true,则对用户进行身份验证
SQL注入和用户输入

为什么不建议在查询中插入用户输入

您不应该在查询中插入用户输入,因为这是用户让数据库执行自己查询的一种方式。 使用注射,他可以显示或更新一些数据,而他不应该被允许这样做

预防注射

为了防止注入,我们的想法是清理/确保用户输入不包含恶意查询/指令


现在,我们有这样的工具,可以通过使用来处理这些问题。

你必须使用MYSQLi或PDO。你使用的是不推荐的函数。永远不要将变量直接传递给你的查询。密码是否在数据库中散列?正如@shashikant所说,使用不推荐的函数和丢弃未初始化的变量,你的系统永远不会安全如果你的密码不是散列的,它应该是。嗨,tektiv,是的,所以使用密码验证我想做一个比较位。谢谢shashikant,我正在寻找关于更新的建议,以便进行调查