2010-04-18 1 views
1

Я пытаюсь разобрать BBcodes в php, но я не думаю, что мой код в безопасности.Как безопасно разбирать bbcodes?

$Text = preg_replace("(\[color=(.+?)\](.+?)\[\/color\])is","<span style=\"color: $1\">$2</span>",$Text); 

Я думаю, вы можете пройти инъекцию, как это, и он будет работать:

[color=<script>alert('gotcha');</script>]...[/color] 

Как улучшить мое регулярное выражение только захват двух STANDAR цветовых форматов:

[color=red]...[/color] OR [color=#FF0000]...[/color] 

Спасибо

+1

Для маскировки тегов html все, что вам нужно, заменяет все '' '' < ' – serg

+0

BBCode не является обычным языком, и поэтому вы не можете использовать регулярное выражение для его синтаксического анализа. – Gumbo

ответ

0
(\[color=((([a-zA-Z])+)|(\#[A-F0-9]{1,6}))) 

Я думаю, что По идее, мое регулярное выражение немного ржавое (извините).

3

На самом деле PHP имеет built-in support for bbcode (хотя вам необходимо установить расширение PECL).

В качестве альтернативы, вы можете использовать PEAR library HTML_BBCodeParser.

Я бы рекомендовал использовать одно из вышеуказанных решений вместо того, чтобы писать свои собственные, поскольку они были протестированы сообществом.

0

Если вы хотите написать свой собственный синтаксический анализатор bbcode, лучше всего потратить некоторое время, чтобы написать приличный Recursive descent parser для него.

Это потому, что вы должны быть уверены, что bbcode правильно отформатирован и вложен, а случайный код может сломать макет. Вы должны позаботиться о том, чтобы удалить идентификаторы протокола javascript: // в ссылках. И возьмите, чтобы только перебирать строку один раз, чтобы избежать двойного кодирования ([b [b] bold me [/ b]] меня тоже [/ b]). Список продолжается и выходит за рамки простых регулярных выражений, чтобы получить полное право.

 Смежные вопросы

  • Нет связанных вопросов^_^