【问题标题】:Django template filter: HTML Sanitization AND Embedding YouTube, Vimeo, etc?Django 模板过滤器:HTML 清理和嵌入 YouTube、Vimeo 等?
【发布时间】:2011-10-13 12:12:14
【问题描述】:

我有一些用户输入的内容(目前在 Markdown 中输入),我希望允许用户嵌入 YouTube、vimeo 等视频。所以不知何故,我需要允许特定的 objectparamembed 标签,同时仍然阻止其他标签。

目前我正在使用白名单清理 HTML。我意识到我可以自定义白名单,因此它专门允许指向特定 URL 的对象,但是为所有不同类型的在线服务编写这个似乎是维护的噩梦。

这是我的逻辑。我们有 Markdown,它本质上是(大部分)安全的。除了 Markdown 中恶意输入的内容之外,Markdown 呈现的实际标签保证是安全的,因此例如,如果我通过 oembed 或视频过滤器运行输出 那些 生成的标签将是安全的。因此,如果我能以某种方式知道那些生成的标签 安全的,然后只剥离其他标签,那将解决问题。我只是不确定钩子是什么。

我想知道在 Python 中是否已经有一种直接的方法可以做到这一点,或者我是否必须想出一些巧妙的技巧。

【问题讨论】:

    标签: python django django-template-filters


    【解决方案1】:

    你应该做的是检查markdown是否安全,看看bleach,然后通过markdown传递它:

    bleached = bleach.clean(user_input, tags=bleach.ALLOWED_TAGS + ['object', 'param', 'embed'], strip=True)
    output = markdown(bleached)
    

    另外,django-janior 看起来可能有用。

    【讨论】:

    • Bleach before markdown 不起作用,因为您必须在 Markdown 之后将它转换为 HTML,而不是之前。请参阅stackoverflow.com/questions/1226406/… 但是,我肯定会考虑使用漂白剂和 django-janitor 作为选项。
    猜你喜欢
    • 2019-01-01
    • 2014-04-04
    • 2015-09-07
    • 2010-12-22
    • 1970-01-01
    • 2011-09-30
    • 2020-11-08
    • 2013-03-16
    • 2012-06-03
    相关资源
    最近更新 更多