![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| OutlawZ |
|
||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 269 Регистрация: 19.10.2007 Репутация: нет Всего: нет |
Привет всем, столкнулся с проблемой фильтрации переменной на теги.
Вот к примеру, создаю рег выражения и разрешаю только три тега:
Но проблема в том что все равно пропускает тег P Фрагмент html кода
Сначала думал что проблема в {1,} т.е один и более символов , а так как стоит [A-Z] т.е символы от A-Z встречаются в передаваеммых данных, и поэтому код пропускает P.
Заменил {1,} на {0,} и тег P больше не проходил Фрагмент html кода
Но когда я разрешаю тег center [^BUICENTER] то по каким то причинам и тег script проходит:
Фрагмент html кода:
Может я как то не правильно составляю рег выражения, просто моя задача разрешить только работу 4 тегов B,I,U,CENTER , но поскольку пропускаются теги script P в разных случаях это не дает гарантии что и другие теги не пройдут. Помогите разобраться с проблемой. p.s Даже если явно указать в коде: $_POST['text'] = ereg_replace("<script>|<[A-Z]{0,}[^BUICENTER]>","",$_POST['text']); То тег script не пропусти но все равно нет уверенности в том что и другие теги не проскочат. Это сообщение отредактировал(а) OutlawZ - 17.6.2009, 14:48 -------------------- ![]() ![]() |
||||||||||||
|
|||||||||||||
| OutlawZ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 269 Регистрация: 19.10.2007 Репутация: нет Всего: нет |
ау, народ )) направьте на тропу истины )
-------------------- ![]() ![]() |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
что-то не то ты пишешь в коде.
символ "<", потом - любое количество символов из диапазона "A-Z" и в конце - любая буква кроме "B,U,I,C,E,N,T,E,R"(в данном случае "Е" указывать бессмысленно). соответственно <P>, <script> - подходит. А вот "<CENTER>" не подойдет как раз(в конце символ "R"). |
|||
|
||||
| OutlawZ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 269 Регистрация: 19.10.2007 Репутация: нет Всего: нет |
Если честно не понял немного, искал ответ в книге Фленова "PHP глазами хакера" там есть раздел что и как фильтровать он там приводит код похожий на мой:
Попробовал его, теги SCRIPT, STRONG исчезли, но P пропустил, хотя Фленов говорит что разрешены будут только те которые начинаются с символа которые мы указали в [^символы], раз таким путем нельзя пойти, может просто сделать два файла, один со всеми тегами а второй с тегами которые доступны на сайте, и загнать все в массивы, первый массив для тегов которые запрещены, а второй массив с тегами которые разрешены и сравнивать их с передаваемыми данными. Если есть другой путь более функциональный приведите пример пожалуйста. на перле проблем с этим не испытывал фильтровало все без проблем. P.S Если кого есть код функции фильтрации переменных то можете его показать? Это сообщение отредактировал(а) OutlawZ - 17.6.2009, 21:20 -------------------- ![]() ![]() |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
извини, я ошибся и тебя запутал.
у тебя там замена, а не поиск. но все равно косяк. регулярка все равно не соответствует ожиданиям. strong фильтрует, потому что сначала("stron") - 1 и более любых символов латиницы("[A-Z]{1,}"), а затем - не символ из набора "B,I,C,E,N,T,E,R". а <P> не фильтрует, потому что в твоей регулярке(во втором варианте) указано, что в теге должно быть минимум два символа(сначала - любой из латиницы - [A-Z], а затем - не "B,I,U,C,E,N,T,E,R"), а в теге "P" всего один. предлагать ничего не буду, потому что, чувствую, сам собьюсь и тебя запутаю. я бы делал в лоб:
но, я уверен, можно сделать через утверждения(?= и ?!=). но опыта использования не имею, потому могу только отправить в ман. и сделать несколько замечаний: 0. вместо eregi_* лучше использовать семейство функций preg_* - возможностей поболее, скорость выше. 1. для простой "вырезки" тегов можно использовать strip_tags 2. даже из разрешенных тегов надо будет выбрасывать все атрибуты, иначе можно пропустить javascript-обработчик и - прощай, безопасность! 3. надо удалять также закрывающие теги. |
|||
|
||||
| OutlawZ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 269 Регистрация: 19.10.2007 Репутация: нет Всего: нет |
Спасибо за ответ )
-------------------- ![]() ![]() |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |