我想编写一个Web应用程序,允许用户输入<div>
元素内可能出现的任何HTML。然后,这个HTML将最终显示给其他用户,因此我想确保该网站不会向人们开放XSS攻击。
Python中是否有一个很好的库可以清除所有事件处理程序属性,<script>
元素和其他来自HTML或DOM树的Javascript文件?
我打算使用Beautiful Soup来规范HTML,以确保它不包含未关闭的标签等。但是,据我所知,它没有预先打包的方法来删除所有Javascript。
如果某个其他语言中有一个很好的库,那也可能有用,但我更喜欢Python。
我已经做了很多谷歌搜索并在pypi上搜寻,但是找不到任何明显的东西。
答案 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中并不是那么难。
问候,