2012-03-13 35 views
2

我想打印出用戶提交markdown生成的HTML,由如何防止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 2012-03-13 07:14:52

+1

已被加入到回答 – 2012-03-13 07:44:52

+0

如果用戶用腳本提交一個類似的XML樹結構會怎麼樣?我的意思是web2py如何區分'XML'輸出和用戶提交的輸出? – Sathvik 2012-03-13 08:05:16