如何阻止此查询的SQL注入?

时间:2010-01-13 09:43:06

标签: sql-injection

现在我有这个表格后期脚本

  <?
   if(isset($_POST['baslik'])) {
$sql = "INSERT INTO yazilar (baslik, spot, spot_kisa, spot_resim, spot_resim_isim, icerik, kategori, tiklanma, eklemetarihi)
VALUES
('$_POST[baslik]','$_POST[spot]','$_POST[spot_kisa]','$_POST[spot_resim]','$_POST[spot_resim_isim]','$_POST[icerik]','$_POST[kategori]','$_POST[tiklanma]','$_POST[tarih]')";
$sonuc = mysql_query($sql) or die(mysql_error());
  if ($sonuc) {
    echo ("<p class='msg done'>Yeni icerik basarili bir sekilde eklendi.</p>");
    exit;
  } 
  else {
    $error = "<p class='msg warning'>Ekleme basarisiz oldu.</p>";  
  }
}
         ?>

如何忽略此查询的sql注入?

2 个答案:

答案 0 :(得分:8)

使用参数化查询。不幸的是,PHP 4中的mysql扩展不支持这些,但如果您使用的是PHP 5,则可以使用mysqli扩展或PDO代替它们。

有关如何完成此操作的示例,请参阅http://www.php.net/manual/en/mysqli.prepare.php

答案 1 :(得分:1)

使用参数化查询作为jammycackes建议是可行的方法,但如果由于某种原因无法使用它们,那么您可以使用mysql-real-escape-string函数来阻止大多数(所有?)危险值。问题是你必须在每个收到的值上使用它,所以你不能使用你在你的例子中使用的简写概念。