Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > Защита от XSS


Автор: EugeneS 17.4.2009, 20:29
Как фильтровать данные чтобы защититься от XSS при автозамене ссылок и bbcode?
Каков минимальный набор символов позволяющий вставить вредоносный скрипт?
А можно использовать процентную кодировку URL для XSS?

Вот такие шаблоны безопасны?

для ссылок:
Код

'#(^|[\] -])((?:http:\/\/)(?:www\.)?(?:[0-9a-z_\.\/\-%]+)(?:\?[\w=-]+(?:&\w+=\w+)*)?)#uim'



для рисунков:
Код

'#\[img\]((http:\/\/)(www\.)?([0-9a-z_\.\/\-]+)\.(jpg|png|gif))\[\/img\]#uiU'


В действии их можно проверить здесь
http://www.scientific-publications.ru/index.php?action=show_theme&t_id=6

Автор: enof 17.4.2009, 20:46
Не мудрите.
Https, ftp, mailto, magnet и т.д. ссылки забыли?
Все пользовательские данные через htmlspecialchars + если есть, вырезать "javascript:" из пути.
У картинок опять же htmlspecialchars + проверка протокола и расширения.

Цитата(EugeneS @  17.4.2009,  21:29 Найти цитируемый пост)
\.

Точка в символьном классе не является специальным символом, так что экранирование не надо.
Цитата(EugeneS @  17.4.2009,  21:29 Найти цитируемый пост)
\-

Если нужен дефис в символьном классе, то нужно его поставить вначало, иначе он задает диапазон.
Цитата(EugeneS @  17.4.2009,  21:29 Найти цитируемый пост)
\/

Экранирование не требуется.
Цитата(EugeneS @  17.4.2009,  21:29 Найти цитируемый пост)
(?:www\.)?

www является таким же субдоменом как и остальные, зачем его выделять?
Ну и данные рв не пропустят много нормальных адресов.

Ну эт так. Делать нечего просто smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)