Здравствуйте, такая проблема. Есть такой запрос Код (Text): $search = $_GET['search']; // Запрос поиска Поиск Отфильтрован так Код (Text): $search = addcslashes($search , "\0..\37!@\@\177..\377"); $search = mysql_escape_string($search); $search = strip_tags($search); $search = htmlspecialchars($search); $search = stripslashes($search); $search = addslashes($search); $search = mysql_real_escape_string($search); Но вот беда. Если сделать такой запрос. site.ru/index.php?search= and <?php phpinfo();?> То вся информация из phpinfo вылазит наружу на странице. Так что получается, недостаточная фильтрация ?? Или я забыл профильтровать спец символы? И как это можно сделать?
Посмотрите что у вас в переменной после этой строки. И вообще посмотрите построчно, что у вас получается. Код (Text): $search = addcslashes($search , "\0..\37!@\@\177..\377"); echo '1. ',$search, '<br>'; $search = mysql_escape_string($search); echo '2. ',$search, '<br>'; $search = strip_tags($search); echo '3. ',$search, '<br>'; $search = htmlspecialchars($search); echo '4. ',$search, '<br>'; $search = stripslashes($search); echo '5. ',$search, '<br>'; $search = addslashes($search); echo '6. ',$search, '<br>'; $search = mysql_real_escape_string($search); echo '7. ',$search, '<br>'; print_r($search);
Все выводит нормальный текст. Если есть html сущности, экранирует их \\'\\'\\'\\'\\' А вот если есть <?php то выводит пустоту. Но на сайте работает. Мб запрет поставить как нить на эти знаки, или еще что можно?
На сайте больше точно нет мест где выводится $_GET['search'] ? проверьте, создайте пустую страницу и введите весь ваш код, он отрабатывает нормально.
У тебя $_GET['search'] в eval что ли уходит в итоге? Или в тело страницы включается? Это не фильтрация, это пизнес. Ты б почитал документацию что ли по функциям, которые юзаешь. А то "все что знал, то и рассказал". Все в кучу собрал, что надо и что не надо. Приведи полностью код, который у тебя такую инъекцию допускает. Поглядеть хоть, что к чему.
Если вы отправляете php скрипты через GET запрос в eval, вы сумасшедший. Главное, смотрите..., чтобы вам не отправили, <злобный смех>... ...
Код (PHP): function filter_check_text($string, $atribut){ switch ($atribut){ case "search" : $string = preg_replace("/[^-0-9а-яёА-ЯЁa-zA-Z.,№ ]/iu", "", $string); break; case "text" : $string = preg_replace("/[^-0-9а-яёА-ЯЁa-zA-Z.,!?:()№=*+ ]/iu", "", $string); break; case "name" : $string = preg_replace("/[^-а-яёА-ЯЁ]/iu", "", $string); break; case "email" : $string = preg_replace("/[^-0-9a-zA-Z@_.]/iu", "", $string); break; case "number" : $string = preg_replace("/[^0-9]/iu", "", $string); break; case "pass" : $string = preg_replace("/[^-0-9a-zA-Z.,!?:_@()=+]/iu", "", $string); break; case "" : $string = preg_replace("/[^\w\x7F-\xFF\s]/", " ", $string); break; } $string = str_replace("\xC2\xA0", " ", $string); //Удаляем неразрывные пробелы //$string = str_replace(chr(160), " ", $string); // для cp1251 $string = str_trim(preg_replace("/ +/", " ", $string)); //сжимаем двойные пробелы return $string; } $search = filter_check_text($_GET['search'] , "search");