django框架防止XSS注入的方法分析
本文实例讲述了django框架防止XSS注入的方法。分享给大家供大家参考,具体如下:
XSS是常见的跨站脚本攻击,而且这种类型的错误很不容易被发现或者被开发人员忽视,当然django框架本身是有这方面的考虑的,比如在模板中自动开启了escape,但事实上,我在改版我的个人博客yihaomen.duapp.com时,在评论框的地方没有用到富文本编辑器,而是让用户自己输入内容,如果某个用户输入了如下类似的东西:
这是我的评论,
而我在模板中是这样使用的{{comment|safe}},由于使用了safefilter,所以这里会直接弹出对话框出来。这就是XSS注入了。真实的项目中是不允许出现这样的情况的,用safe的目的是为了更好的显示html标签等。所以要解决的方式是在后台接收到内容的时候,进行转义处理,特别是"<>"这些符号,以及单引号,双引号等,最初,我自己写了一些替换方法。比如
defcheckxss(content): checked_content=content checked_content=re.sub(r"&","&",checked_content,0,re.I) checked_content=re.sub(r"'","´",checked_content,0,re.I) checked_content=re.sub(r'""',""",checked_content,0,re.I) checked_content=re.sub(r"<","<",checked_content,0,re.I) checked_content=re.sub(r">",">",checked_content,0,re.I) checked_content=re.sub(r"/","/",checked_content,0,re.I)
当然在后台处理掉这些,然后保存到数据库,再次打开的时候,在模板用|safe过滤器,就会还原成原来的样子,确实没错。但问题是我自己画蛇添足了。因为django自身有一系列的方法。这些方法在django.utils.html package中。我用这几个写一个测试.
''' Createdon2013-11-21 @author:yihaomen.com ''' fromdjango.utils.htmlimportescape,strip_tags,remove_tags html_content="""yihaomen.comtest content