PHP - 防止 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 插入语句中的注入。
谢谢
苏海尔。
使用 PDO 和准备好的 queries.Use 准备好的语句和参数化查询。这些是 SQL 语句,与任何参数分开发送到数据库服务器并由其解析。这样攻击者就不可能注入恶意 SQL.Have 请看下面的示例。
($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();
使用prepared statements,无论如何都能解决问题。通过这种方式,用户输入将单独发送,无法篡改查询。
http://php.net/manual/de/mysqli.quickstart.prepared-statements.php
或How can I prevent SQL injection in PHP?
我将保持简短,我正在尝试将一些代码应用于我的插入查询以防止 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 插入语句中的注入。
谢谢
苏海尔。
使用 PDO 和准备好的 queries.Use 准备好的语句和参数化查询。这些是 SQL 语句,与任何参数分开发送到数据库服务器并由其解析。这样攻击者就不可能注入恶意 SQL.Have 请看下面的示例。
($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();
使用prepared statements,无论如何都能解决问题。通过这种方式,用户输入将单独发送,无法篡改查询。
http://php.net/manual/de/mysqli.quickstart.prepared-statements.php
或How can I prevent SQL injection in PHP?