【问题标题】:How can I prevent web2py from automagically encoding html-entities?如何防止 web2py 自动编码 html-entities?
【发布时间】:2012-03-13 20:50:30
【问题描述】:

我正在尝试打印为用户提交者markdown 生成的 HTML,作者为

{{=markdown(post.message)}}

markdown函数在哪里导入

from gluon.contrib.markdown.markdown2 import markdown

We2Py 似乎会自动编码 HTML 实体,因此每个 < 都被转换为 < 并且每个 > 都被转换为 >。我该如何防止这种情况发生?

在执行此操作时,我是否需要牢记任何安全问题?另外,谁能告诉我如何在将HTML 存储在数据库中时将其剥离,同时保留markdown

【问题讨论】:

    标签: html markdown web2py html-entities


    【解决方案1】:

    你必须这样做:

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

    每个字符串都被模板渲染过滤,如果你传递"<div>",它将被渲染为"<div>",这是为了防止恶意代码。

    当您将字符串传递给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
    

    【讨论】:

    • 如果用户使用脚本提交类似的 XML 树结构怎么办?我的意思是 web2py 如何区分其XML 输出和用户提交的输出?
    • 用户只能提交文本,所有文本默认转义。避免这种情况的唯一方法是将文本传递给 web2py XML() 助手类,它知道如何在不转义的情况下呈现自己。用户无法提交XML 助手类的实例。注意,在这种情况下,当我们说XML helper 时,我们指的是一个名为“XML”的 Python 类,它是 web2py 的一部分,而不是恰好是有效 XML 的通用字符串(如果用户提交这样的字符串,它仍然会被转义)。
    • 有没有办法全局设置permitted_tagsallowed_attributes,这样我就不需要到处添加它们了?现在我正在使用在我的模型中导入的函数 (def my_xml(st): return XML(st, sanitize=True,...)) 以供全球使用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-11
    • 2010-10-21
    • 1970-01-01
    • 2017-09-25
    • 2012-05-04
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多