| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Защита от кодированного XSS |
| Автор: tolik777 13.6.2008, 09:55 | ||
| Обнаружил на своем сайте XSS-уязвимость. Есть поиск по сайту. Код такой обработки данных:
Проблема в том, что проходит код 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??? |
| Автор: Feldmarschall 13.6.2008, 10:04 |
| Я бы порекомендовал приучать себя фильтровать на выходе. Входов много, а выход - один. |
| Автор: tolik777 13.6.2008, 13:20 | ||
Именно поэтому и хочу на входе все отбросить. Тут просто на форуме в основном все предлагают при выводе ставить функцию htmlspecialchars, а про вход ничего нет. Хмм, вроде бы strip_tags решает все проблемы. Что-то я про нее совсем забыл. |
| Автор: Kallisto 13.6.2008, 13:47 |
| Как вариант: foreach($_REQUEST as $key=>$value) $_REQUEST[$key] = addslashes(htmlspecialchars($value)); |
| Автор: Feldmarschall 13.6.2008, 13:49 |
| хехе. приятно послушать беседу настоящих специалистов. можно я со своими дурацкими вопросами? Не могли бы вы пояснить механизм этого "укладывания"? Если кто-нибудь из вас объяснит механизм действия XSS на входе, а не а выходе, то на форуме тут же что-нибудь появится на эжту тему. гениальное решение. а в чем его принципиальное отличие от htmlspecialchars? |
| Автор: tolik777 13.6.2008, 14:28 |
| да чо-то я ступил, от супрастина вообще торможу. воспрос закрыт |
| Автор: tolik777 13.6.2008, 21:34 | ||
| Еще один вопрос. Сделал функцию фильтрации, но не могу понять почему у меня если использовать htmlentities, а затем mysql_real_escape_string к русским словам добавляется \0? К примеру следующий код:
Выдает: 4 5 6 Вы искали: тест\0 |
| Автор: tolik777 14.6.2008, 08:56 |
| Если заменить htmlentities на htmlspecialchars, то все ок, символы не добавляются. |
| Автор: Feldmarschall 14.6.2008, 11:16 |
| результат работы mysql_real_escape_string тебя вообще не должен волновать и уж тем более, результату работы этой функции нечего делать на экране |
| Автор: SelenIT 28.9.2008, 13:25 | ||||
Самый надежный вариант:
А вообще самый стандартный, логичный и правильный вариант. |
| Автор: nerezus 28.9.2008, 17:39 | ||||||||
Защищать ничего не надо. Нужно просто подготавливать данные для вывода при выводе. Советую использовать PHP/Smarty/etc шаблонизатор Добавлено через 2 минуты и 11 секунд
|
| Автор: lukas 29.9.2008, 08:29 | ||
я не понял что значит у меня много вывода???, в чем проблема... |
| Автор: MoLeX 29.9.2008, 08:49 |
| дату темы смотели?!) автор уже наверное решил проблему) |
| Автор: SelenIT 29.9.2008, 11:47 |
| MoLeX, я специально поднял, в связи с недавно всплывавшим похожим вопросом. Чтобы закрыть ее на правильной ноте. А то порядком поднадоели эти регулярные попытки изобрести "лекарство от XSS на входе"... ;) |