【发布时间】: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