PHP - 防止INSERT语句上的SQL注入

时间:2015-11-03 11:27:35

标签: php sql insert

我保持简短,我试图将一些代码应用于我的插入查询以防止SQL注入。请参阅以下代码:

$insertquery = mysql_query("INSERT INTO users (firstname, lastname, email, username, password) VALUES ('".mysql_real_escape_string($fname)."', '".mysql_real_escape_string($lname)."', '".mysql_real_escape_string($email)."', '".mysql_real_escape_string($username)."', .'".mysql_real_escape_string($pass)."')");
            header("location:index-login-page.php?msg1=Thank you for choosing SIAA, please login.");

上面的代码不会插入任何数据,但它仍会打印msg1消息。我做错了什么,或者甚至可以防止插入语句上的SQL注入。

谢谢

苏海尔。

2 个答案:

答案 0 :(得分:3)

使用PDO和准备好的查询。使用预准备语句和参数化查询。这些是由数据库服务器与任何参数分开发送和解析的SQL语句。这样攻击者就无法注入恶意SQL。请看下面的例子。

($conn is a PDO object)

$conn = new PDO('mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'pass');
$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $conn->prepare("INSERT INTO users VALUES(:firstname, :lastname)");
$stmt->bindValue(':firstname', $firstname);
$stmt->bindValue(':lastname', $lastname);
$stmt->execute();

答案 1 :(得分:1)

使用预备语句,这将在任何情况下解决问题。这样,用户输入就会单独发送,无法篡改查询。

http://php.net/manual/de/mysqli.quickstart.prepared-statements.php

How can I prevent SQL injection in PHP?