Как остановить манипуляцию BB-кодом? - PullRequest
0 голосов
/ 10 августа 2010

Привет. Недавно я обнаружил проблему, при которой люди, использующие BB-код для ввода ссылок, могут ими манипулировать.

Они предназначены для ввода чего-то вроде:

[LINK]http://www.domain.com[/LINK]

Однако они могут ввести что-то подобное, чтобы сделать цвет ссылки красным:

[LINK]http://www.domain.com 'span style="color:red;"'[/LINK]

Это код, который его преобразует:

$text = preg_replace("/\\[LINK\\\](.*?)\\[\/LINK\\]/is",
                       "<a href='$1' target='_blank'>$1</a>", $text);

Также , я забыл, это другой тип:

[LINK=http://www.domain.com]example text[/LINK]

$text = preg_replace("/\\[LINK\=(.*?)\\\](.*?)\\[\/LINK\\]/is",
                       "<a href='$1' target='_blank'>$2</a>", $text);

Ответы [ 2 ]

0 голосов
/ 10 августа 2010

Это очень опасно, особенно если ваши гости достаточно умны, чтобы начать добавлять обработчики onclick в ссылку.

Как сказал mvds, замените все цитаты и апострафы.Санитарная обработка имеет важное значение.

Однако для этой конкретной проблемы с URL это не поможет.Тем не менее, существует множество валидаторов URL для регулярных выражений, которые исключают любые непослушные маленькие модификаторы кода из фактического URL.

0 голосов
/ 10 августа 2010

Не разрешать кавычки и тому подобное в URL, а также удалять теги, которые не пройдены при первом проходе:

$text = preg_replace("/\[LINK\]([^'\"\\s]*?)\[\/LINK\]/is",
                               "<a href='$1' target='_blank'>$1</a>", $text);

$text = preg_replace("/\[LINK\](.*?)\[\/LINK\]/is", "<i>(link removed)</i>", $text);
...