Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Защита от кодированного XSS, Как защититься на "входе"? 
:(
    Опции темы
tolik777
  Дата 13.6.2008, 09:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Обнаружил на своем сайте XSS-уязвимость.
Есть поиск по сайту.
Код такой обработки данных:
Код

$search_word = mysql_real_escape_string($_REQUEST['search_string']);
.....далее SQL запрос к БД на предмет поиска этой строки
echo 'Вы искали: '.$search_word;
....далее вывод результатов

Проблема в том, что проходит код XSS типа http://*****.ru/search.php?search_string=%22%3E%3Ch1%3EX_S_S%3C/h1%3E%3Ca%20href=%22search.php?search_string=

Можно конечно поставить echo 'Вы искали: '.htmlspecialchars($search_word);
Но у меня там много вывода, да и хотелось бы сразу на входе защитить. На ум ничего больше не приходит, как вырезать все знаки % (т.к. в поисковом слове не используются), или ухищрения при помощи декодирования строки запроса.
Что посоветуете кроме как фильтровать на выходе при помощи htmlspecialchars???
PM MAIL WWW ICQ   Вверх
Feldmarschall
Дата 13.6.2008, 10:04 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



Я бы порекомендовал приучать себя фильтровать на выходе.
Входов много, а выход - один. 
PM   Вверх
slaw
Дата 13.6.2008, 12:33 (ссылка)    | (голосов:8) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 19.4.2008

Репутация: нет
Всего: 1



Цитата(Feldmarschall @  13.6.2008,  10:04 Найти цитируемый пост)
Я бы порекомендовал приучать себя фильтровать на выходе.Входов много, а выход - один. 

будем считать, что ты пошутил... до вывода серв ляжет при хорошем XSS


tolik777, убивай все спецсимволы, потому что помимо % есть еще варианты (или можешь экранировать их)


Цитата(tolik777 @  13.6.2008,  09:55 Найти цитируемый пост)
Можно конечно поставить echo 'Вы искали: '.htmlspecialchars($search_word);Но у меня там много вывода, да и хотелось бы сразу на входе защитить. На ум ничего больше не приходит, как вырезать все знаки % (т.к. в поисковом слове не используются), или ухищрения при помощи декодирования строки запроса.Что посоветуете кроме как фильтровать на выходе при помощи htmlspecialchars???

ты же вход защищаешь  smile  зачем вывод пускать через htmlspecialchars
PM MAIL WWW   Вверх
tolik777
Дата 13.6.2008, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Цитата
ты же вход защищаешь    зачем вывод пускать через htmlspecialchars 

Именно поэтому и хочу на входе все отбросить. Тут просто на форуме в основном все предлагают при выводе ставить функцию htmlspecialchars, а про вход ничего нет.

Хмм, вроде бы strip_tags решает все проблемы. Что-то я про нее совсем забыл. 
PM MAIL WWW ICQ   Вверх
Kallisto
Дата 13.6.2008, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 163
Регистрация: 20.4.2007

Репутация: -3
Всего: -1



Как вариант: 
foreach($_REQUEST as $key=>$value) $_REQUEST[$key] = addslashes(htmlspecialchars($value));
smile

Это сообщение отредактировал(а) Kallisto - 13.6.2008, 13:48
PM MAIL   Вверх
Feldmarschall
Дата 13.6.2008, 13:49 (ссылка) |    (голосов:7) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



хехе.
приятно послушать беседу настоящих специалистов.
можно я со своими дурацкими вопросами?

Цитата(slaw @  13.6.2008,  12:33 Найти цитируемый пост)
до вывода серв ляжет при хорошем XSS

Не могли бы вы пояснить механизм этого "укладывания"?

Цитата(slaw @  13.6.2008,  12:33 Найти цитируемый пост)
ты же вход защищаешь 

Цитата(tolik777 @  13.6.2008,  13:20 Найти цитируемый пост)
а про вход ничего нет.

Если кто-нибудь из вас объяснит механизм действия XSS на входе, а не а выходе, то на форуме тут же что-нибудь появится на эжту тему. 

Цитата(tolik777 @  13.6.2008,  13:20 Найти цитируемый пост)
вроде бы strip_tags решает все проблемы. 

гениальное решение. а в чем его принципиальное отличие от htmlspecialchars?
PM   Вверх
tolik777
Дата 13.6.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



да чо-то я ступил, от супрастина вообще торможу. воспрос закрыт
PM MAIL WWW ICQ   Вверх
tolik777
Дата 13.6.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Еще один вопрос. Сделал функцию фильтрации, но не могу понять почему у меня если использовать htmlentities, а затем mysql_real_escape_string к русским словам добавляется \0?
К примеру следующий код:
Код

$search_string = "тест";
echo strlen($search_string)."<BR>";
$search_string = htmlentities($search_string,ENT_QUOTES,"UTF-8");        // мнемонизировали строку.
echo strlen($search_string)."<BR>";
$search_string = mysql_real_escape_string($search_string);
echo strlen($search_string)."<BR>";
echo 'Вы искали: '.$search_string;


Выдает:
4
5
6
Вы искали: тест\0 

PM MAIL WWW ICQ   Вверх
tolik777
Дата 14.6.2008, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 133
Регистрация: 19.6.2006

Репутация: нет
Всего: 2



Если заменить htmlentities на htmlspecialchars, то все ок, символы не добавляются.
PM MAIL WWW ICQ   Вверх
Feldmarschall
Дата 14.6.2008, 11:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: 22
Всего: 32



результат работы mysql_real_escape_string тебя вообще не должен волновать
и уж тем более, результату работы этой функции нечего делать на экране

PM   Вверх
SelenIT
Дата 28.9.2008, 13:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата

Как защититься на "входе"?

Самый надежный вариант:
Код

if (preg_match("/[^\w ]/", $search_string)) // если в декодированном поисковом запросе есть что-то, 
                               // кроме букв, цифр, подчеркиваний и пробелов - 
                               // считаем, что нас ломают. А с хакерами у нас разговор короткий ;)
{
    header ("404 Not Found");
    die ("Иди RTFM, кулхацкер юный! :))))))))))))))")
}


А вообще
Цитата(tolik777 @  13.6.2008,  09:55 Найти цитируемый пост)
echo 'Вы искали: '.htmlspecialchars($search_word);

самый стандартный, логичный и правильный вариант.


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
nerezus
Дата 28.9.2008, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 12
Всего: 43



Цитата

и хотелось бы сразу на входе защитить. 
 Не правильно.
Защищать ничего не надо.

Нужно просто подготавливать данные для вывода при выводе.

Советую использовать PHP/Smarty/etc шаблонизатор

Добавлено через 2 минуты и 11 секунд
Цитата

будем считать, что ты пошутил... до вывода серв ляжет при хорошем XSS
 Он не пошутил.

Цитата

Самый надежный вариант:
 А смысл. Вариант гораздо лучше ты написал ниже.
 
Цитата

самый стандартный, логичный и правильный вариант.
 +1.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
lukas
Дата 29.9.2008, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Цитата(tolik777 @  13.6.2008,  09:55 Найти цитируемый пост)
Можно конечно поставить echo 'Вы искали: '.htmlspecialchars($search_word);
Но у меня там много вывода, да и хотелось бы сразу на входе защитить. На ум ничего больше не приходит, как вырезать все знаки % (т.к. в поисковом слове не используются), или ухищрения при помощи декодирования строки запроса.


я не понял что значит у меня много вывода???, в чем проблема...


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
MoLeX
Дата 29.9.2008, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



дату темы смотели?!) автор уже наверное решил проблему)


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
SelenIT
Дата 29.9.2008, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



MoLeX, я специально поднял, в связи с недавно всплывавшим похожим вопросом. Чтобы закрыть ее на правильной ноте. А то порядком поднадоели эти регулярные попытки изобрести "лекарство от XSS на входе"... ;)


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0999 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.