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


PHP - Preventing SQL Injection on INSERT STATEMENT

我将保持简短,我正在尝试将一些代码应用于插入查询,以防止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注入。

谢谢

Sohail。

使用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();

使用准备好的语句,这将在任何情况下解决问题。通过这种方式,用户输入将被单独发送,并且无法篡改查询。

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

或者如何防止PHP中的SQL注入?