这段代码注射安全吗?

时间:2013-03-23 22:33:44

标签: mysql pdo output

我已经用我想到的代码更新了这个问题以接受用户输入。基本上我正在尝试确保此代码不受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>

1 个答案:

答案 0 :(得分:4)

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

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

添加搜索框

当您将任何用户提供的值用于SQL查询时,您将接触到SQL注入。因此,您必须小心并适当地处理用户提供的数据。 您可以将搜索框中的字符串用于数据库查询,对吗?

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

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

建议 pst ,建议使用PDO继续。

以下是一些关于该主题的好文章:

使用mysql_real_escape_string

已弃用。来自php documentation

  

此扩展程序自PHP 5.5.0起已弃用,将被删除   未来。相反,应使用MySQLiPDO_MySQL扩展名。   有关更多信息,另请参阅MySQL: choosing an API guide and related FAQ   信息。该功能的替代方案包括:

     
      
  • mysqli_real_escape_string()
  •   
  • PDO::quote()
  •