2012-03-13 2 views
2

Я пытаюсь распечатать HTML генерируется для пользователя-подателю markdown, поКак я могу предотвратить web2py от автоматического кодирования html-сущностей?

{{=markdown(post.message)}} 

где функция уценки импортируется через

from gluon.contrib.markdown.markdown2 import markdown 

We2Py кажется автоматически кодировать HTML-сущности, так что каждый < преобразуется в &lt;, и каждый > преобразуется в &gt;. Как я могу предотвратить это?

Есть ли проблемы с безопасностью, которые мне нужно учитывать при этом? Кроме того, кто-нибудь может рассказать мне, как я могу удалить HTML при хранении в базе данных, сохраняя markdown?

ответ

9

Вы должны сделать это:

{{=XML(markdown(post.message))}} 

каждая строка продезинфицировать по шаблону визуализации, если вы передаете "<div>" воздастся, как "&lt;div&gt;" это для защиты от вредоносного кода.

Когда вы передаете строку в XML помощника XML("<div>") он использует XML анализатор для отображения строки в к структуре XML дерева, XML имеет метод .xml() который возвращает неэкранированную строку в response.body так браузер пользователя имеет правильный HTML ,

Вы можете управлять некоторыми параметрами рендеринга XML.

:param text: the XML text 
:param sanitize: sanitize text using the permitted tags and allowed attributes (default False) 
:param permitted_tags: list of permitted tags (default: simple list of tags) 
:param allowed_attributes: dictionary of allowed attributed 
+0

Это сработало! Но как? – Sathvik

+1

добавлено в ответ –

+0

Что делать, если пользователь отправляет подобную структуру дерева XML со сценарием? Я имею в виду, как web2py различает вывод 'XML' и пользовательских? – Sathvik

Смежные вопросы