За последние 24 часа нас посетили 17553 программиста и 1713 роботов. Сейчас ищет 1831 программист ...

SQL-инъекции

Тема в разделе "PHP для новичков", создана пользователем nixx, 28 мар 2013.

  1. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    типичный говнокодец =)

    Код (PHP):
    1. if (!isset($_GET['action']) OR empty($_GET['action']) OR $_GET['action'] != 'show_desk') {
    2.   header('Location: /');
    3. }
    4.  
    Давай рости! Всегда ищи что можно улучшить в своих знаниях и подходах.
     
  2. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Сразу видно Попов.

    А вообще это залепон... Проверка говно.

    Везде писать isset, empty... это бредово...
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не ну без иссета будет нотис полюбас, если данных нет.
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Да я не про это...
    Нужно делать отдельный метод и проверять.
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Известно, что empty не бросает нотиса, поэтому парная проверка не обязательно
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    я просто на эмпти не проверяю обычно. если прислали - надо работать. ежели хочет человек пустую строку присылать, то нехай будет. =)
     
  7. nixx

    nixx Активный пользователь

    С нами с:
    20 фев 2013
    Сообщения:
    132
    Симпатии:
    0
    Здесь полный no pasaran
    Код (Text):
    1. if  (isset($_GET['id'])) {$fid=$_GET['id'];if( (strlen($fid)<=3) and ctype_digit($fid) ...  
    Просвятите насчет % и null .В PHP нет функции для этого?
     
  8. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Notice
     
  9. bkm

    bkm Активный пользователь

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    +1
     
  10. nixx

    nixx Активный пользователь

    С нами с:
    20 фев 2013
    Сообщения:
    132
    Симпатии:
    0
    Нашел такую жесткую штуку,может кому пригодится ))
    Код (Text):
    1. функция чистки GET запроса
    2. function filter_get($get_id){
    3.  
    4. $get_id = substr($get_id, 0, 7); //укорачиваем запрос до 7 знаков
    5. $get_id = preg_replace("/[^\w\x7F-\xFF\s]/", "", $get_id); # каленым железом выжжем все "ненормальные" символы
    6. $get_id = str_replace(chr(160), "", $get_id); //Удаляем неразрывные пробелы
    7. $get_id = preg_replace("/ +/", "", $get_id); //сжимаем двойные пробелы
    8.  
    9. return $get_id;
    10. }
    11.  
    12. $id = intval(filter_get($_GET['id']));
    13. if ($id != "0" && is_int($id)){
    14. // тут мой код
    15. }
    А я думал intval-a хватает ...
     
  11. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    LOL! Вот это <матное слово>.
    Во первых $_GET['id'] Notice variable id
    Во вторых это, что за хлам <матное слово>?

    Код (PHP):
    1. $id=isset($_GET['id'])?$_GET['id']:'';
    2. $id=intval(preg_replace('/[^0-9]/','',$id));
    3. echo $id; 
    ?id=!:O%J;p5!@#%32 6%43%#@!*(%$h
    Вывод
    532643
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    для инта хватает интвала. а если текст, то надо использовать ТОЛЬКО ОДНУ функцию. а не этот хлам сверху =)
    зачем он вообще написан и что он делает - загадка.
     
  13. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Где нашли?
     
  14. nixx

    nixx Активный пользователь

    С нами с:
    20 фев 2013
    Сообщения:
    132
    Симпатии:
    0
    Когда начинал изучать php , копировал разный код где придется,для изучения.

    Код (Text):
    1. $id=preg_replace('/[^a-zA-Z0-9_]+/','',$id);
    Вот это тоже не плохо.
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а что по-вашему делает этот код?
     
  16. nixx

    nixx Активный пользователь

    С нами с:
    20 фев 2013
    Сообщения:
    132
    Симпатии:
    0
    Мои знания шепчут,что все знаки кроме _ букв и цифр удаляются
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    и зачем это может понадобиться в защите от инъекций? =)
     
  18. nixx

    nixx Активный пользователь

    С нами с:
    20 фев 2013
    Сообщения:
    132
    Симпатии:
    0
    Так уже не прокатит
    SELECT * FROM
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  20. nixx

    nixx Активный пользователь

    С нами с:
    20 фев 2013
    Сообщения:
    132
    Симпатии:
    0
    Интересно поговорить со знающими людьми.
    Но многие забывают,что они тоже были когда-то не очень знающими.
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    эт фигня, это только начало. потом приходят знания о том, что бывает, что эта функция не спасает. вот тогда только понимание появится =)
    а еще есть миф про соль в хеше...
     
  22. nixx

    nixx Активный пользователь

    С нами с:
    20 фев 2013
    Сообщения:
    132
    Симпатии:
    0
    Функция форума и есть место,где понимающие,могли бы делиться своими пониманиями с непонимающими.
    Правда трудно иногда понять непонимающих понимаемым ))
    Но факт ,что инъекции главная на сегодня проблема для понимающих и не очень.
    Простой скрипт надо обвешивать кучей фильтров и подобных им,чтобы он был более менее безопасным.
    Код (Text):
    1. if(substr_count($myrow['text_comment'], ' ')<1){$text_comment=wordwrap($myrow['text_comment'],42,' ',1);}
    Код (Text):
    1. $fotoname=md5(time() . mt_rand()).".".$ext;
    Код (Text):
    1. function escape_inj ($text) {
    2.   $text = strtolower($text); // Приравниваем текст параметра к нижнему регистру
    3.   if (
    4.     !strpos($text, "select") && //
    5.     !strpos($text, "union") && //
    6.     !strpos($text, "select") && //
    7.     !strpos($text, "order") && // Ищем вхождение слов в параметре
    8.     !strpos($text, "where") && //
    9.     !strpos($text, "char") && //
    10.     !strpos($text, "from") //
    11.   ) {
    12.     return true; // Вхождений нету - возвращаем true
    13.   } else {
    14.     return false; // Вхождения есть - возвращаем false
    15.   }
    16. }
    Это все простые и известные примеры с инета.Первый самописный.
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Надо установить правильную колировку в правильных местах и юзать вышеуказанную функцию. И всё.
     
  24. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    О, я такие (но почти такие) использовал, и нормально работали )))
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    люди порой никакие не используют, и всё равно нормально работает...