Как заблокировать SQL-инъекцию для этого запроса? - PullRequest
0 голосов
/ 13 января 2010

теперь у меня есть сценарий отправки формы

  <?
   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 ]

8 голосов
/ 13 января 2010

Используйте параметризованные запросы. К сожалению, они не поддерживаются расширением mysql в PHP 4, но если вы используете PHP 5, вы можете вместо этого использовать расширение mysqli или PDO.

См. http://www.php.net/manual/en/mysqli.prepare.php для примера того, как это делается.

1 голос
/ 13 января 2010

Использование параметризованных запросов, как предлагает jammycackes, - это путь, но если вы по какой-то причине не можете их использовать, вы можете использовать функцию mysql-real-escape-string, чтобы заблокировать большинство (всех?) Опасных значений. Проблема в том, что вы должны использовать его для каждого полученного значения, поэтому вы не можете использовать сокращенное представление, которое вы используете в своем примере.

...