SQL инъекция

Статус
В этой теме нельзя размещать новые ответы.

designf

Постоялец
Регистрация
24 Май 2009
Сообщения
104
Реакции
8
Народ. Есть сайт. Одни типы угрожают что есть опасность инъекции. Я посмотрел код.

просмотр категории

mysait.ru/index.php?category=1

достаточно ли защититься от инъекции, таким путем:

PHP:
$cat=intval($_GET[categoty]);

далее, запрос

PHP:
SELECT * FROM $db_category WHERE selector=$cat
 
Народ. Есть сайт. Одни типы угрожают что есть опасность инъекции. Я посмотрел код.

просмотр категории

mysait.ru/index.php?category=1

достаточно ли защититься от инъекции, таким путем:

PHP:
$cat=intval($_GET[categoty]);
далее, запрос

PHP:
SELECT * FROM $db_category WHERE selector=$cat

как-то так по проще будет

PHP:
SELECT * FROM $db_category WHERE selector = '".(int)$_GET['category']."'
 
Для чисел лучше не использовать кавычки.
 
PHP:
if ( ! $cat = intval($_GET['categoty']) die("Пошли на юх!");  
$result = mysql_query('SELECT * FROM ' . $db_category . ' WHERE `selector` = ' . $cat);

Можно и так.
 
Действительно, а зачем лишние запросы к базе делать, если там бяка.
Спасибо. А то пишу им, мол покажите результ инъекции - молчат ...

Вот и засомневался.
 
PHP:
if ( ! $cat = intval($_GET['categoty']) die("Пошли на юх!");  
$result = mysql_query('SELECT * FROM ' . $db_category . ' WHERE `selector` = ' . $cat);
Можно и так.
на юг посылать пользователя, наверное, стоит не всегда, может у него рука дрогнула и вместе с цифрой что-то еще попало в адрес.
А вот обработать только то, что было в параметре числовое - это дело.
Кстати, почему-то никто не проверил знак числа, там хоть и не инъекция, но будет ошибка sql, если параметр равен нулю.
Я обычно делаю так:
PHP:
$cat=intval($_GET['categoty']); 
if($cat>0){
   //делаем SELECT
}else{
  //вывести ошибку, что категория не найдена. Не убивая программу, пусть шаблоны отработают и все остальное, чтобы страница получилась приличная
}
 
Kloster, какая может быть ошибка sql, если параметр равен нулю =)?
 
на юг посылать пользователя, наверное, стоит не всегда, может у него рука дрогнула и вместе с цифрой что-то еще попало в адрес.
А вот обработать только то, что было в параметре числовое - это дело.
Кстати, почему-то никто не проверил знак числа, там хоть и не инъекция, но будет ошибка sql, если параметр равен нулю.
Я обычно делаю так:
PHP:
$cat=intval($_GET['categoty']); 
if($cat>0){
   //делаем SELECT
}else{
  //вывести ошибку, что категория не найдена. Не убивая программу, пусть шаблоны отработают и все остальное, чтобы страница получилась приличная
}

А я что тогда проверил в первой строке? :)
Конечно, на юг посылать и не обязательно. Лучше в логи писать такое дело. Ну или дефолтную категорию выводить.
 
Слушайте, затупил что-то. В конце дня башка уже не варит. :)
 
Я делаю вот так
PHP:
if (!$cat = intval($_GET['categoty'])) $cat=1; // где 1 ето значение по умолчанию

посылать пользователей не очень этически, может он не преднамеренно ступил :D
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху