SQL инъекция

Тема в разделе "PHP", создана пользователем designf, 25 июн 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. designf

    designf Постоялец

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

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

    mysait.ru/index.php?category=1

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

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

    PHP:
    SELECT FROM $db_category WHERE selector=$cat
     
  2. неважно

    неважно Создатель

    Регистр.:
    8 апр 2006
    Сообщения:
    34
    Симпатии:
    13
    как-то так по проще будет

    PHP:
    SELECT FROM $db_category WHERE selector '".(int)$_GET['category']."'  
     
    designf нравится это.
  3. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    591
    Для чисел лучше не использовать кавычки.
     
  4. t0os

    t0os

    Регистр.:
    21 окт 2007
    Сообщения:
    284
    Симпатии:
    36
    PHP:
    if ( ! $cat intval($_GET['categoty']) die("Пошли на юх!");  
    $result mysql_query('SELECT * FROM ' $db_category ' WHERE `selector` = ' $cat);
    Можно и так.
     
    designf нравится это.
  5. designf

    designf Постоялец

    Регистр.:
    24 май 2009
    Сообщения:
    104
    Симпатии:
    16
    Действительно, а зачем лишние запросы к базе делать, если там бяка.
    Спасибо. А то пишу им, мол покажите результ инъекции - молчат ...

    Вот и засомневался.
     
  6. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    на юг посылать пользователя, наверное, стоит не всегда, может у него рука дрогнула и вместе с цифрой что-то еще попало в адрес.
    А вот обработать только то, что было в параметре числовое - это дело.
    Кстати, почему-то никто не проверил знак числа, там хоть и не инъекция, но будет ошибка sql, если параметр равен нулю.
    Я обычно делаю так:
    PHP:
    $cat=intval($_GET['categoty']); 
    if(
    $cat>0){
       
    //делаем SELECT
    }else{
      
    //вывести ошибку, что категория не найдена. Не убивая программу, пусть шаблоны отработают и все остальное, чтобы страница получилась приличная
    }
     
  7. неважно

    неважно Создатель

    Регистр.:
    8 апр 2006
    Сообщения:
    34
    Симпатии:
    13
    Kloster, какая может быть ошибка sql, если параметр равен нулю =)?
     
  8. t0os

    t0os

    Регистр.:
    21 окт 2007
    Сообщения:
    284
    Симпатии:
    36
    А я что тогда проверил в первой строке? :)
    Конечно, на юг посылать и не обязательно. Лучше в логи писать такое дело. Ну или дефолтную категорию выводить.
     
  9. Kloster

    Kloster

    Регистр.:
    22 июн 2009
    Сообщения:
    216
    Симпатии:
    12
    Слушайте, затупил что-то. В конце дня башка уже не варит. :)
     
  10. myweb

    myweb Среда обитания WEB

    Регистр.:
    10 сен 2007
    Сообщения:
    539
    Симпатии:
    246
    Я делаю вот так
    PHP:
    if (!$cat intval($_GET['categoty'])) $cat=1// где 1 ето значение по умолчанию
    посылать пользователей не очень этически, может он не преднамеренно ступил :D
     
Статус темы:
Закрыта.