如何编写安全的用户名& PHP中的密码验证以防止SQL注入?

时间:2017-04-05 06:45:22

标签: php mysql sql security sql-injection

如何编写安全的用户名& PHP中的密码验证?

我使用MD5作为密码($ pass)和字符串作为用户名($ name),并在PHP中编写此代码以进行用户帐户验证。

$post_vars = $_POST;
if (isset($post_vars['name']))
      {
        $name = $post_vars['name'];
        $pass = md5($post_vars['pass']);
        $dbConn = db_open();
        $sql = "select `password` from `user_table` where `user_name` = '$name' limit 1;";
        echo $sql;
        $sth = $dbConn->prepare($sql);
        $sth->execute();
        $row = $sth->fetch();
        if ($row !== false)
        {
          $verify = $row['password'];
          if ($pass == $verify)
          {
            $_SESSION['isLoggedIn'] = true;
            header('Location: ' . _DEBUG_URL_);
          }
          else $iframeURL = _LIB_URL_ . 'accessdenied.htm';
        }
        else echo 'No results found!';
    }

这个查询是否可以被SQL注入方法破解,以及如何被黑客入侵?我使用PDO for MySQL。

"select `password` from `user_table` where `user_name` = '$name' limit 1;"

1 个答案:

答案 0 :(得分:-2)

Mysql注入发生在表单字段中,人们只需在您的登录表单中输入一个查询,他们就会按下登录。您可以使用找到的PDO::prepare语句here

我还建议使用sprintf()进行查询:

$sql = sprintf("select `password` from `user_table` where `user_name` = '%s' limit 1", $name);