白名单HTML标记,以及Python中的最佳实践

时间:2015-05-01 18:04:22

标签: python html security xss

我正在构建一个Web应用程序,允许用户从其他网站解析和存储HTML内容。 目前,我这样做:

lxml.html.fromstring(html).text_content()

因此,如果html = "Hi ! This is a <a href='#>link</a>",则"Hi ! This is a link"打印唯一的内容。

从安全的角度来看,它很好(没有XSS),但从功能上来说,我希望我的用户使用一些HTML标记,带有一些标记属性(some = whitelist)。

例如,我可以使用<a href="http://google.com">Google</a>,但不能使用<a href="http://google.com" onClick="alert(1)">Malicious</a>,我希望将其转换为<a href="http://google.com">Malicious</a>

是否有任何图书馆才能这样做,或者我是否必须自己实施?

1 个答案:

答案 0 :(得分:0)

听起来您可能想要查看Markdown语法。可能有一个降价解析器可以强制执行您正在寻找的控件。您必须将HTML转换为Markdown语法,然后使用Markdown以您想要的格式重新创建标记。

http://en.wikipedia.org/wiki/Markdown

快速搜索找到了这个用于python的降价解析器。

https://pypi.python.org/pypi/Markdown

将HTML转换为markdown可以在此stackoverflow答案中找到...

Is there javascript to convert HTML to markdown?