我的mysql搜索是否足够安全,可以防止基本的注入攻击


Is my mysql search secure enough to prevent basic injection attacks?

我最近用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注入