Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 26, 2011 11:31:47

magnet85
От:
Зарегистрирован: 2009-04-13
Сообщения: 91
Репутация: +  2  -
Профиль   Отправить e-mail  

простые bbcode

Доброго времени суток.
Хочу добавить некоторые bbcode теги в комментарии. Делаю так:

При сохранении в базу сообщение эскепирую, то есть все теги с квадратными скобками сохранятся:

from django.utils.html import escape
cd['message'] = escape(cd['message'])
Затем при выводе с помощью шаблонного фильтра заменяю bbcode на нужный мне html эквивалент:
@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 }}
Собственно вопросы:
1) Безопасно ли так делать (xss?)?
2) Может есть ещё решения?



Офлайн

#2 Сен. 26, 2011 19:36:31

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

простые bbcode

postmarkup делает это более правильно) регекспы вообще гавно, но когда-то мне надо было сваять заглушку (в постмарапе нашёл кучу xss, а форкать его не было желания + автор подзабил), сваял https://bitbucket.org/slav0nic/django-bbmarkup/wiki/Home на регекспах, но сейчас postmarkup - ok

Офлайн

#3 Сен. 26, 2011 19:54:24

magnet85
От:
Зарегистрирован: 2009-04-13
Сообщения: 91
Репутация: +  2  -
Профиль   Отправить e-mail  

простые bbcode

slav0nic
Я тоже нашёл xss, например:

[url=javascript:alert(String.fromCharCode(88,83,83))]http://google.com[/url]
думаю она не одна.

Вообщем решил использовать postmarkup, работает вроде хорошо, свои велосипед не хочется придумывать, единственное, этот postmarkup размером в 1500 строк, типа как по воробью из пушки. Ещё нашёл фильтр для bbcode, в исходниках http://softwaremaniacs.org/soft/cicero/source/ он поменьше раза в 3, но его не проверял.



Офлайн

#4 Сен. 27, 2011 18:20:15

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2267
Репутация: +  41  -
Профиль   Отправить e-mail  

простые bbcode

ну я Cагалаеву репортил пару xss)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version