我最近用html表单php和mysqli制作了一个搜索引擎。它所做的是,无论我在表单中输入什么术语,它都会在我的mysql数据库中搜索,并将其回声返回到我的html页面上。到目前为止,它按我的意愿运行。然而,我看到有人在我制作这个引擎的教程中警告Mysql注入攻击,所以有人可以检查我下面的代码并给我一个建议吗。
<?php
$k = mysqli_real_escape_string($_GET['k']);
$terms = mysqli_real_escape_string(explode(" ", $k));
$query = "SELECT * FROM xaplinks WHERE ";
$i = 0;
foreach ($terms as $each) {
$i++;
if ($i == 1) {
$query .= "xap_name LIKE '%$each%'"; }
else {
$query .= "OR xap_name LIKE '%$each%'"; }
}
$con = mysqli_connect('mysql.hostinger.in','steve','password', 'win');
$query = mysqli_real_escape_string(mysqli_query($con, $query));
$numrows = mysqli_num_rows($query);
if ($numrows > 0) {
while ($row = mysqli_fetch_assoc($query)) {
$name = $row['xap_name'];
$link = $row['xap_link'];
echo "<a href='$link'>$name</a></br>";
}
}
else {
echo "No results found. :( ";
}
mysqli_close($con);
?>
我在网上读到mysqli中的转义字符串可以帮助防止注入,所以我使用了它,但不确定它是否正确实现。我对mysqli很陌生。
如有任何帮助/提示,我们将不胜感激,提前感谢。:)
使用PDO类而不是mysqli类。此外,使用事先准备好的语句。
您可以使用mysqli->prepare 创建一个prepare语句
应该能解决你的问题。
$queryPrepared = mysqli->prepare($query)
点击此处查看更多信息。PHP MySQLI阻止SQL注入