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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не понятка с регулярным выражением, рег выражение 
:(
    Опции темы
OutlawZ
Дата 17.6.2009, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



Привет всем, столкнулся с проблемой фильтрации переменной на теги.

Вот к примеру, создаю рег выражения и разрешаю только три тега:

Код

$_POST['text'] = ereg_replace("<[A-Z]{1,}[^BUI]>","",$_POST['text']);


Но проблема в том что все равно пропускает тег P 

Фрагмент html кода
Код

<B>B</B> <I>I</I> <U>U</U> <P>P</P>


Сначала думал что проблема в {1,} т.е один и более символов , а так как стоит [A-Z] т.е символы от A-Z встречаются в передаваеммых данных, и поэтому код пропускает P.

Код

$_POST['text'] = ereg_replace("<[A-Z]{0,}[^BUI]>","",$_POST['text']);


Заменил {1,} на {0,} и тег P больше не проходил

Фрагмент html кода
Код

<B>B</B><I>I</I><U>U</U>P


Но когда я разрешаю тег center [^BUICENTER] то по каким то причинам и тег script проходит:

Код

$_POST['text'] = ereg_replace("<[A-Z]{0,}[^BUICENTER]>","",$_POST['text']);


Фрагмент html кода:
Код

<B>B</B><I>I</I><U>U</U><CENTER>center</CENTER><script>script</SCRIPT>


Может я как то не правильно составляю рег выражения, просто моя задача разрешить только работу 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


--------------------
user posted image
user posted image
PM MAIL   Вверх
OutlawZ
Дата 17.6.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



ау, народ )) направьте на тропу истины )


--------------------
user posted image
user posted image
PM MAIL   Вверх
skyboy
Дата 17.6.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



что-то не то ты пишешь в коде.
Цитата

<[A-Z]{0,}[^BUICENTER]>

символ "<", потом - любое количество символов из диапазона "A-Z" и в конце - любая буква кроме "B,U,I,C,E,N,T,E,R"(в данном случае "Е" указывать бессмысленно). соответственно <P>, <script> - подходит. А вот "<CENTER>"  не подойдет как раз(в конце символ "R").

PM MAIL   Вверх
OutlawZ
Дата 17.6.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



Если честно не понял немного, искал ответ в книге Фленова "PHP глазами хакера" там есть раздел что и как фильтровать он там приводит код похожий на мой:

Код

$str = "<I><STRONG>Hello <B> World<script>";
$str = ereg_replace("<[A-Z]{1,}[^BUI]>", "",$str);
print($str);


Попробовал его, теги SCRIPT, STRONG исчезли, но P пропустил, хотя Фленов говорит что разрешены будут только те которые начинаются с символа которые мы указали в [^символы], раз таким путем нельзя пойти, может просто сделать два файла, один со всеми тегами а второй с тегами которые доступны на сайте, и загнать все в массивы, первый массив для тегов которые запрещены, а второй массив с тегами которые разрешены и сравнивать их с передаваемыми данными. 

Если есть другой путь более функциональный приведите пример пожалуйста.  smile 

на перле проблем с этим не испытывал фильтровало все без проблем.

P.S Если кого есть код функции фильтрации переменных то можете его показать?

Это сообщение отредактировал(а) OutlawZ - 17.6.2009, 21:20


--------------------
user posted image
user posted image
PM MAIL   Вверх
skyboy
Дата 18.6.2009, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



извини, я ошибся и тебя запутал.
у тебя там замена, а не поиск.
но все равно косяк. регулярка
Цитата(skyboy @  17.6.2009,  17:11 Найти цитируемый пост)
<[A-Z]{1,}[^BUICENTER]>

все равно не соответствует ожиданиям.
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" всего один.
предлагать ничего не буду, потому что, чувствую, сам собьюсь и тебя запутаю.
я бы делал в лоб:
Код

<(/?([^buic]|c[^e]|ce[^n]|cen[^t]|cent[^e]|cente[^r])[^ ]*)( [^>]*)?>

но, я уверен,  можно сделать через утверждения(?= и ?!=). но опыта использования не имею, потому могу только отправить в ман.
и сделать несколько замечаний:
0. вместо eregi_* лучше использовать семейство функций preg_* - возможностей поболее, скорость выше.
1. для простой "вырезки"  тегов можно использовать strip_tags
2. даже из разрешенных тегов надо будет выбрасывать все атрибуты, иначе можно пропустить javascript-обработчик и - прощай,  безопасность!
3. надо удалять также закрывающие теги.
PM MAIL   Вверх
OutlawZ
Дата 18.6.2009, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 269
Регистрация: 19.10.2007

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



Спасибо за ответ )


--------------------
user posted image
user posted image
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.0461 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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