Проблема с данными полученными через $_GET

StasON

Новичок
Очень странная проблема, сейчас попробую описать...
Мы получаем данные через $_GET
Дальше из полученного результата мы в строке должный найти слово а значит
if(preg_match("/\bпривет\b/i",$recived_text))
{
код...
}
else
{
return("Что то нетак...");
}
При выполнении запроса вида example.com?text=привет
данная проверка возвращает фолс. Если сделать вывод $recived_text через echo то показывает верное значение. Если же вместо $recived_text создать переменную допустим $some_text = "привет как жизнь?" и заменить ее в проверке то проверка возращает тру.
 

AmdY

Пью пиво
Команда форума
тогда добавь модификатор u, если utf

StasON
спасибо, я не замечал этой фичи
 

StasON

Новичок
Неа... Вместо 'ыва привет ываы' делаю свою переменную полученную через гет и опять получаю фалс.
 

AmdY

Пью пиво
Команда форума
исходники кода в utf-8, всё прекрасно работает, даже в ie8
PHP:
// http://site.my/?q=%D1%8B%D0%B2%D0%B0%20%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82%202%D1%8B%D0%B2%D0%B0%D1%8B
if(preg_match("/(?<!\p{L}})".preg_quote('привет', '/')."(?!\p{L}})/",  $_GET['q'], $m))
{
    var_dump('ok', $m);
}
else
{
    var_dump('bad');
}
 

tiger-nick

Новичок
Попробуй использовать функции
PHP:
url_encode(); // переводит строку в формат для url
url_decode(); // переводит обратно
//т.е.
echo '<a href="example.com?text='.url_encode($text).'">link</a>';
//еще проверь приходит ли вообще у тебя переменая $_GET['text']!
 

AmdY

Пью пиво
Команда форума
tiger-nick
совету прочитать всё обсуждение
 

light83

Новичок
Уважаемые, расскажите кто в теме. Некий Фленов, автор книги "веб-сервер глазами хакера", пишет что через функцию urldecode могут выполняться системные вызовы вроде ls, если они есть в декодируемой строке. Это его глючит, или действительно функция для раскодировки использует какие то unix-вызовы, которые сами по себе содержат уязвимость позволяющие выполнять системные функции?
Открой файл viewtopic.php и найди строку:
$words = explode(' ', trim(htmlspecialchars(urldecode($HTTP_GET_VARS['highlight']))));
Если соображаешь в PHP, то должен заметить функцию urldecode, которая как раз и выполняет системные вызовы, переданные через URL. Убери эту функцию и должно остаться только:
$words = explode(' ', trim(htmlspecialchars($HTTP_GET_VARS['highlight'])));
После этого, если щёлкнешь по ссылке, которую я оставил выше, имена пользователей будут отображаться верно и нельзя будет получить доступ к системным файлам
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
light83 расслабься, подобных дырок в php нет, а если когда-то и появлялись, то очень быстро исправлялись
вызов системных команд делается известными конструкциями http://ua2.php.net/manual/en/ref.exec.php
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Кхм, книга то неплохая, но не новая, потому не стоит ее воспринимать всерьез.
 

light83

Новичок
Вообще то год переиздания 2009, исправленное и дополненное издание. Я даже в 2003 http_get_vars не использовал. Вообще не понимаю, как можно быть спецом и в си, и в делфи, и в пхп, и в юниксе, как г-н Фленов, навыпускавший книг по каждой из тем, да всё "глазами хакера". urldecode - это моя попытка найти хоть что то необычное и новое для себя в его книге(все ж таки обещают аж запуск системных вызовов через функцию декодирования адреса), потому что все остальные уязвимости какие он описал, уж очень примитивные.
 
Сверху