是否有一个开源Python库用于清理HTML并删除所有Javascript?

时间:2009-12-06 08:51:42

标签: javascript python parsing xss

我想编写一个Web应用程序,允许用户输入<div>元素内可能出现的任何HTML。然后,这个HTML将最终显示给其他用户,因此我想确保该网站不会向人们开放XSS攻击。

Python中是否有一个很好的库可以清除所有事件处理程序属性,<script>元素和其他来自HTML或DOM树的Javascript文件?

我打算使用Beautiful Soup来规范HTML,以确保它不包含未关闭的标签等。但是,据我所知,它没有预先打包的方法来删除所有Javascript。

如果某个其他语言中有一个很好的库,那也可能有用,但我更喜欢Python。

我已经做了很多谷歌搜索并在pypi上搜寻,但是找不到任何明显的东西。

相关

5 个答案:

答案 0 :(得分:5)

正如Klaus所提到的,社区中明确的共识是使用BeautifulSoup来完成这些任务:

soup = BeautifulSoup.BeautifulSoup(html)
for script_elt in soup.findAll('script'):
    script_elt.extract()
html = str(soup)

答案 1 :(得分:4)

允许标记,属性及其值的白名单方法是唯一可靠的方法。看看Recipe 496942: Cross-site scripting (XSS) defense

现有的标记语言有什么问题,比如在这个网站上使用?

答案 2 :(得分:0)

您可以使用BeautifulSoup。它允许您相当容易地遍历标记结构,即使它没有格式良好。我不知道订购的东西只适用于脚本标签。

答案 3 :(得分:0)

我会诚实地使用bbcode或其他替代标记来使用它。

答案 4 :(得分:0)

埃里克,

您是否考虑过为HTML使用'SAX'类型解析器?我真的不确定 虽然它会适当地忽略事件。构建它比使用Beautiful Soup之类的东西要困难一些。处理语法错误也可能是SAX的问题。

在这种情况下我喜欢做的是从解析的HTML构造python对象(从XML_Element类继承)。然后从树中删除任何不需要的对象,最后将对象重新序列化回html。在python中并不是那么难。

问候,