PDO中的安全字符串变量

时间:2014-10-22 19:39:01

标签: php pdo

最后我从sql迁移到PDO,但我对字符串'

有点困惑

这是我的代码,它完美地工作并从sql注入中获得保护

$connect = new PDO("mysql:host = localhost;dbname=sqlitest" , "root" , "");
$catId = $_GET["Id"];  //Id = int eg:1
$query = "select * from viewimage where ImageCategory =? ";
$result = $connect->prepare($query);
$result->execute(array($catId));
$result->setFetchMode(PDO::FETCH_ASSOC);
while($fetch = $result->fetch()):
    $img = $fetch["Image"];
    echo "<img src='img/event/$img' height='300px' width='300px'>";
endwhile;

但是当$catId = $_GET["Id"];其中Id是一个字符串字符串,例如:ColorDay,我尝试

localhost/test/view.php?id=ColorDay'

如果我放

,在上面的情况下不显示图像
localhost/test/view.php?id=1'

结果相同并在包含图像的同一页面上重定向,我应使用哪个命令来保护字符串中的“无图像结果”

2 个答案:

答案 0 :(得分:0)

这一行:

$result->execute(array($catId));

使您的代码安全。如果图片没有被退回,那就是另一个问题,但对我而言,这似乎是预期的行为。

答案 1 :(得分:0)

  1. 在您在应用程序中使用之前,对进入您的网址并解码数据的任何字符串进行编码(see this
  2. 注意XSS,不要只是将数据库中的字符串输出到浏览器。
  3. 请参阅this answer,了解如何完全阻止SQL注入。