Как безопасно разобрать bbcodes? - PullRequest
1 голос
/ 18 апреля 2010

Я пытаюсь разобрать BB-коды в php, но я не думаю, что мой код вообще безопасен.

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

Я думаю, что вы можете сделать такую ​​инъекцию, и она будет работать:

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

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

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

Спасибо

Ответы [ 3 ]

3 голосов
/ 18 апреля 2010

PHP фактически имеет встроенную поддержку bbcode (хотя вам нужно установить расширение PECL).

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

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

0 голосов
/ 18 апреля 2010

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

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

0 голосов
/ 18 апреля 2010
(\[color=((([a-zA-Z])+)|(\#[A-F0-9]{1,6})))

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

...