За последние 24 часа нас посетили 106372 программиста и 5631 робот. Сейчас ищут 2517 программистов ...

Фильтр GET запроса.

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

  1. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Здравствуйте, такая проблема.

    Есть такой запрос

    Код (Text):
    1. $search = $_GET['search']; // Запрос поиска Поиск
    Отфильтрован так

    Код (Text):
    1. $search = addcslashes($search , "\0..\37!@\@\177..\377");
    2. $search = mysql_escape_string($search);
    3. $search = strip_tags($search);
    4. $search = htmlspecialchars($search);
    5. $search = stripslashes($search);
    6. $search = addslashes($search);  
    7. $search = mysql_real_escape_string($search);
    Но вот беда. Если сделать такой запрос.

    site.ru/index.php?search= and <?php phpinfo();?>

    То вся информация из phpinfo вылазит наружу на странице. Так что получается, недостаточная фильтрация ?? Или я забыл профильтровать спец символы? И как это можно сделать?
     
  2. kosinus2012

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

    С нами с:
    16 июл 2012
    Сообщения:
    137
    Симпатии:
    0
    Посмотрите что у вас в переменной после этой строки. И вообще посмотрите построчно, что у вас получается.
    Код (Text):
    1.  
    2. $search = addcslashes($search , "\0..\37!@\@\177..\377");
    3. echo '1. ',$search, '<br>';
    4. $search = mysql_escape_string($search);
    5. echo '2. ',$search, '<br>';
    6. $search = strip_tags($search);
    7. echo '3. ',$search, '<br>';
    8. $search = htmlspecialchars($search);
    9. echo '4. ',$search, '<br>';
    10. $search = stripslashes($search);
    11. echo '5. ',$search, '<br>';
    12. $search = addslashes($search);  
    13. echo '6. ',$search, '<br>';
    14. $search = mysql_real_escape_string($search);
    15. echo '7. ',$search, '<br>';
    16.  
    17. print_r($search);
     
  3. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    Все выводит нормальный текст. Если есть html сущности, экранирует их \\'\\'\\'\\'\\'
    А вот если есть <?php то выводит пустоту. Но на сайте работает. Мб запрет поставить как нить на эти знаки, или еще что можно?
     
  4. 715kg

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

    С нами с:
    2 мар 2013
    Сообщения:
    147
    Симпатии:
    0
    так в чем проблема. Помогите пожалуйста!!!
     
  5. kosinus2012

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

    С нами с:
    16 июл 2012
    Сообщения:
    137
    Симпатии:
    0
    На сайте больше точно нет мест где выводится $_GET['search'] ? проверьте, создайте пустую страницу и введите весь ваш код, он отрабатывает нормально.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    У тебя $_GET['search'] в eval что ли уходит в итоге? Или в тело страницы включается?
    Это не фильтрация, это пизнес. Ты б почитал документацию что ли по функциям, которые юзаешь. А то "все что знал, то и рассказал". Все в кучу собрал, что надо и что не надо.

    Приведи полностью код, который у тебя такую инъекцию допускает. Поглядеть хоть, что к чему.
     
  7. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.068
    Симпатии:
    7
    Если вы отправляете php скрипты через GET запрос в eval, вы сумасшедший. Главное, смотрите..., чтобы вам не отправили, <злобный смех>...
    ...
     
  8. bkm

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

    С нами с:
    22 окт 2009
    Сообщения:
    299
    Симпатии:
    0
    Код (PHP):
    1. function filter_check_text($string, $atribut){
    2.  
    3. switch ($atribut){
    4.     case "search" :    $string = preg_replace("/[^-0-9а-яёА-ЯЁa-zA-Z.,№ ]/iu", "", $string); break;
    5.     case "text" :    $string = preg_replace("/[^-0-9а-яёА-ЯЁa-zA-Z.,!?:()№=*+ ]/iu", "", $string); break;
    6.     case "name"  :    $string = preg_replace("/[^-а-яёА-ЯЁ]/iu", "", $string); break;
    7.     case "email" :    $string = preg_replace("/[^-0-9a-zA-Z@_.]/iu", "", $string); break;
    8.     case "number" :    $string = preg_replace("/[^0-9]/iu", "", $string); break;
    9.     case "pass"   :    $string = preg_replace("/[^-0-9a-zA-Z.,!?:_@()=+]/iu", "", $string); break;
    10.     case ""  :    $string = preg_replace("/[^\w\x7F-\xFF\s]/", " ", $string); break;
    11. }
    12.  
    13. $string = str_replace("\xC2\xA0", " ", $string); //Удаляем неразрывные пробелы
    14. //$string = str_replace(chr(160), " ", $string); // для cp1251
    15. $string = str_trim(preg_replace("/ +/", " ", $string)); //сжимаем двойные пробелы
    16. return $string;
    17. }
    18.  
    19. $search = filter_check_text($_GET['search'] , "search"); 
     
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.012
    Симпатии:
    1.679
    Адрес:
    :сердА
    Да что не так с этими людьми :(
    Ребят, перегибаете ппц :)