【发布时间】:2013-05-03 12:43:04
【问题描述】:
有人告诉我,这段代码很容易受到 SQL 注入的影响。我如何将其更改为安全?我知道使用准备好的语句是最好的,但我还没有找到一种不会破坏它的方法。
<?php
$con = new mysqli("localhost", "", "", "");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$existsQuery = "select count(*) as count from entry where emailaddress like '" . $_POST[emailaddress] . "'";
$existsResult = mysqli_query($con, $existsQuery);
if ($existsResult->fetch_object()->count > 0) {
header('Location: index2.php?email=exists');
} else {
$sql = "INSERT INTO entry (firstname, lastname, emailaddress, favoritesong) VALUES ('$_POST[firstname]','$_POST[lastname]','$_POST[emailaddress]','$_POST[favoritesong]')";
if (!mysqli_query($con, $sql)) {
die('Error: ' . mysqli_error($con));
}
echo "1 record added";
}
mysqli_close($con);
?>
【问题讨论】:
-
老实说,只要给自己找一个好的PDO tutorial 并让它发挥作用。然后返回并将您学到的知识应用到您的代码中。先理解,再应用。同时尝试两者是困难的,并且可能会让人不知所措。
-
身边还有各种各样的MySQLi教程(如this)
-
永远不要相信客户数据...仅此而已:)