我有一些用户输入的内容(目前在 Markdown 中输入),我想让用户嵌入 YouTube、vimeo 等视频。因此,我需要以某种方式允许特定的 object
、param
和 embed
标记,同时仍然阻止其他标记。
目前我正在使用白名单清理 HTML。我意识到我可以自定义白名单,以便它专门允许指向特定 URL 的对象,但是为所有不同类型的在线服务编写这个似乎是维护的噩梦。
这是我的逻辑。我们有 Markdown,它本质上(大部分)是安全的。除了在 Markdown 中恶意输入的内容之外,Markdown 呈现的实际标签保证是安全的,因此例如,如果我通过 oembed 或视频过滤器运行输出,那些生成的标签将是安全的。因此,如果我能以某种方式知道那些生成的标签 是 安全的,然后只剥离其他标签,那将解决问题。我只是不确定钩子(Hook)是什么。
我想知道在 Python 中是否已经有一种直接的方法可以做到这一点,或者我是否必须想出一些聪明的技巧。
最佳答案
你应该做的是检查 Markdown 是否安全,看看bleach ,然后通过 Markdown 传递它:
bleached = bleach.clean(user_input, tags=bleach.ALLOWED_TAGS + ['object', 'param', 'embed'], strip=True)
output = markdown(bleached)
此外,django-janior看起来可能会有用。
关于python - Django 模板过滤器 : HTML Sanitization AND Embedding YouTube, Vimeo 等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832064/