Форум сайта python.su
Доброго времени суток.
Хочу добавить некоторые bbcode теги в комментарии. Делаю так:
При сохранении в базу сообщение эскепирую, то есть все теги с квадратными скобками сохранятся:
from django.utils.html import escape
cd['message'] = escape(cd['message'])
@register.filter
def bbcode(value):
bbdata = [
(r'\[url=(.+?)\](.+?)\[/url\]', r'<a href="\1">\2</a>'),
(r'\[b\](.+?)\[/b\]', r'<b>\1</b>'),
(r'\[i\](.+?)\[/i\]', r'<i>\1</i>'),
(r'\[u\](.+?)\[/u\]', r'<u>\1</u>'),
(r'\[quote\](.+?)\[/quote\]', r'<div style="margin-left: 1cm">\1</div>'),
(r'\[code\](.+?)\[/code\]', r'<pre>\1</pre>'),
]
for bbset in bbdata:
p = re.compile(bbset[0], re.DOTALL)
value = p.sub(bbset[1], value)
return value
{{ comment.text|bbcode|safe|linebreaks }}
Офлайн
postmarkup делает это более правильно) регекспы вообще гавно, но когда-то мне надо было сваять заглушку (в постмарапе нашёл кучу xss, а форкать его не было желания + автор подзабил), сваял https://bitbucket.org/slav0nic/django-bbmarkup/wiki/Home на регекспах, но сейчас postmarkup - ok
Офлайн
slav0nic
Я тоже нашёл xss, например:
[url=javascript:alert(String.fromCharCode(88,83,83))]http://google.com[/url]
Офлайн
ну я Cагалаеву репортил пару xss)
Офлайн