【问题标题】:Is my mysql search secure enough to prevent basic injection attacks? [duplicate]我的 mysql 搜索是否足够安全以防止基本的注入攻击? [复制]
【发布时间】:2016-01-04 04:59:21
【问题描述】:

我最近做了一个使用 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 使用准备好的语句。这可能也很有趣:htmlpurifier.org 以进一步防止 XSS 注入到您的实际数据中。
  • explode 返回一个数组,但 mysqli_real_escape_string 需要一个字符串。

标签: php mysql mysqli code-injection


【解决方案1】:

使用PDO 类而不是mysqli 类。此外,使用prepared statements

【讨论】:

    【解决方案2】:

    您可以使用 mysqli->prepare 创建准备好的语句

    应该可以解决你的问题。

    $queryPrepared = mysqli->prepare($query)
    

    在此处查看更多信息。 PHP MySQLI Prevent SQL Injection

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 2014-12-17
      • 2013-03-13
      相关资源
      最近更新 更多