Django 模板过滤器:HTML 消毒和嵌入 YouTube、Vimeo 等?

3 投票
1 回答
892 浏览
提问于 2025-04-16 22:17

我有一些用户输入的内容(目前是用Markdown格式输入的),我想让用户能够嵌入YouTube、Vimeo等视频。所以我需要允许特定的objectparamembed标签,同时又要阻止其他标签。

现在我正在使用一个白名单来清理HTML。我知道我可以定制这个白名单,让它专门允许指向特定网址的对象,但为所有不同类型的在线服务写这个白名单,感觉维护起来会很麻烦。

这是我的想法。Markdown本身是(大部分)安全的。除了用户恶意输入的内容,Markdown生成的实际标签是可以保证安全的。所以如果我把输出通过一个oembed或视频过滤器处理,那些生成的标签肯定是安全的。所以如果我能以某种方式确认这些生成的标签安全的,然后只去掉其他标签,那就能解决这个问题。我只是还不确定该怎么做。

我在想,Python中是否已经有简单的方法来实现这个,还是我需要想出一些聪明的解决办法。

1 个回答

2

你应该检查一下这个markdown是否安全,可以看看bleach这个工具,然后再把它处理成markdown格式:

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

另外,django-janior这个工具看起来也可能会很有用。

撰写回答