PHP中的参数化查询与MySQL连接

时间:2016-04-01 22:26:28

标签: php mysql sql-injection login-page

我已经阅读过SQL注入,所以我尝试使用我的网站,当然它有效..我知道解决方案是参数化查询,我也知道有很多例子,但没有一个提到我们连接数据库的部分。 所以这是我的登录页面的PHP代码的一部分:

$userName = $_POST["username"];
$userPass = $_POST["password"];

$query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'";

$result = mysqli_query($dbc, $query); //$dbc is for MySQL connection: $dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db)

$row = mysqli_fetch_array($result);

if(!$row){
    echo "No existing user or wrong password.";
}

我一直在寻找解决方案很长一段时间,但我无法弄清楚如何以参数化方式使其工作。能否请你帮我完成我的代码以防止SQL注入?

2 个答案:

答案 0 :(得分:4)

你去吧

$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($stmt, "s", $userName);
mysqli_stmt_bind_param($stmt, "s", $userPass);
mysqli_stmt_execute($stmt);
$row = mysqli_stmt_fetch($stmt);

Documentation

作为附注,我建议加密密码或更好地使用哈希来保证安全性,将密码存储为纯文本并不好

答案 1 :(得分:-1)

使用:

$userPass = mysqli_real_escape_string($mysqli,$_POST["password"]);

这阻止了''或者' ='东西:)其中$ mysqli是你的连接字符串。