2

我已经用我想到的接受用户输入的代码更新了这个问题。基本上我试图确保这段代码不受 SQL 注入的影响,因为它确实有用户输入。

<?php
$username = "XXXX";
$password = "XXXX";
?>

<font size="+3" face="Verdana">XXXX</font>
<br><br>
<form name="form" action="XXX.PHP" method="get">
<input type="text" name="q" size="60" />
<input type="submit" name="Submit" value="Search">
</form>

<table>

<?

$var = $_GET['q'];

try {
$conn = new PDO('mysql:host=localhost;dbname=XXXX', $username, $password);
$stmt = $conn->prepare("SELECT * FROM XXXX WHERE XXXX LIKE '%$var%' OR XXXX LIKE '%$var%' OR XXXX LIKE '%$var%'");
$stmt->execute(array());

$result = $stmt->fetchAll();

if ( count($result) ) {
foreach($result as $row) {
echo "<tr>";
echo "<td>" .$row['XXXX']. "</td>";
echo "<td>" .$row['XXXX']. "</td>";
echo "<td>" .$row['XXXX']. "</td>";
echo "</tr>";    
}  
} 
else {
echo "No results found.";
}
} 
catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}
?>
</table>
4

1 回答 1

4

如果您没有正确处理恶意用户提供的数据,您只会冒 SQL 注入的风险。

由于您的查询中没有任何用户提供的数据,因此您不必担心 SQL 注入方面的任何事情。

添加搜索框

当你在 SQL 查询中使用任何用户提供的值时,你就会暴露在 SQL 注入中。因此,您必须小心并适当地处理用户提供的数据。您会将搜索框中的字符串用于数据库查询,对吗?

然后你需要处理字符串以避免任何 SQL 注入

为什么你应该使用 PHP 的 PDO 进行数据库访问

正如pst所建议的,使用 PDO 是推荐的继续方式。

这里有一些关于这个主题的好文章:

使用 mysql_real_escape_string

已弃用。来自php 文档

从 开始,此扩展程序已弃用PHP 5.5.0,并将在将来删除。相反,应该使用MySQLior扩展名。PDO_MySQL另请参阅MySQL: choosing an API guide and related FAQ以获取更多信息。此功能的替代方案包括:

于 2013-03-23T22:38:46.810 回答