django框架防止XSS注入的方法分析


Posted in Python onJune 21, 2019

本文实例讲述了django框架防止XSS注入的方法。分享给大家供大家参考,具体如下:

XSS 是常见的跨站脚本攻击,而且这种类型的错误很不容易被发现或者被开发人员忽视,当然django 框架本身是有这方面的考虑的,比如在模板中自动开启了 escape, 但事实上,我在改版我的 个人博客 yihaomen.duapp.com 时,在评论框的地方没有用到富文本编辑器,而是让用户自己输入内容,如果某个用户输入了如下类似的东西:

这是我的评论,

<script>alert('xss injection');</script>

而我在模板中是这样使用的 {{comment|safe}}, 由于使用了 safe filter ,所以这里会直接弹出对话框出来。这就是XSS 注入了。真实的项目中是不允许出现这样的情况的,用safe 的目的是为了更好的显示html标签等。所以要解决的方式是在后台接收到内容的时候,进行转义处理,特别是 "< > " 这些符号,以及 单引号,双引号等,最初,我自己写了一些替换方法。比如

def checkxss(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中。我用这几个写一个测试.

'''
Created on 2013-11-21
@author: yihaomen.com
'''
from django.utils.html import escape, strip_tags, remove_tags
html_content = """
  <html xmlns="http://www.w3.org/1999/xhtml">
  <head>
  <script>alert("test")</script>
  <title>yihaomen.com test</title>
  <link href="/static/css/style.css" rel="external nofollow" rel="stylesheet" type="text/css" />
  </head>
  <body>
   content
  </body>
  </html>
"""
def escape_html(html):
  return escape(html);
def stript_all_tags(html):
  return strip_tags(html)
def remove_part_tags(html,tags):
  return remove_tags(html, tags)
if __name__ == '__main__':
  print "====escape all tags======"
  print escape_html(html_content)
  print "====remove all tags======"
  print strip_tags(html_content)
  print "===remove part tags.====="
  print remove_part_tags(html_content,"script html body")

当然还有更多的方法,可以查看django的代码。 以上的方法可以看到 django 可以很方便的 eacape 所有html标签,也可以部分 escape html标签,还可以只保留内容等。确实很方便。

由此可见用 django.utils.html 里面的东西,足够应付 xss 注入.

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
python实现的一个p2p文件传输实例
Jun 04 Python
Python文件操作类操作实例详解
Jul 11 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
Python实现屏幕截图的代码及函数详解
Oct 01 Python
python文件名和文件路径操作实例
Sep 29 Python
linux环境下Django的安装配置详解
Jul 22 Python
python3 实现爬取TOP500的音乐信息并存储到mongoDB数据库中
Aug 24 Python
关于Python3 类方法、静态方法新解
Aug 30 Python
python3 BeautifulSoup模块使用字典的方法抓取a标签内的数据示例
Nov 28 Python
python绘制动态曲线教程
Feb 24 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
Python实现视频自动打码的示例代码
Apr 08 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 #Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 #Python
pyqt5让图片自适应QLabel大小上以及移除已显示的图片方法
Jun 21 #Python
django框架使用orm实现批量更新数据的方法
Jun 21 #Python
python字典改变value值方法总结
Jun 21 #Python
python如何以表格形式打印输出的方法示例
Jun 21 #Python
pytz格式化北京时间多出6分钟问题的解决方法
Jun 21 #Python
You might like
PHP5中MVC结构学习
2006/10/09 PHP
php 动态添加记录
2009/03/10 PHP
php实现给一张图片加上水印效果
2016/01/02 PHP
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
jQueryPad 实用的jQuery测试工具(支持IE,chrome,FF)
2010/05/22 Javascript
基于JavaScript短信验证码如何实现
2016/01/24 Javascript
Javascript数组循环遍历之forEach详解
2016/11/07 Javascript
Bootstrap fileinput文件上传组件使用详解
2017/06/06 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
p5.js入门教程之小球动画示例代码
2018/03/15 Javascript
JavaScript实现一个简易的计算器实例代码
2018/05/10 Javascript
微信小程序使用scroll-view标签实现自动滑动到底部功能的实例代码
2018/11/09 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
Python分析学校四六级过关情况
2017/11/22 Python
Django自定义过滤器定义与用法示例
2018/03/22 Python
python3 对list中每个元素进行处理的方法
2018/06/29 Python
django模板结构优化的方法
2019/02/28 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
python opencv 实现对图像边缘扩充
2020/01/19 Python
浅谈keras使用中val_acc和acc值不同步的思考
2020/06/18 Python
css3翻牌翻数字的示例代码
2020/02/07 HTML / CSS
Canvas实现保存图片到本地的示例代码
2018/06/28 HTML / CSS
html5 canvas的绘制文本自动换行的示例代码
2018/09/17 HTML / CSS
迪士尼英国官方商店:shopDisney UK
2019/09/21 全球购物
请编程遍历页面上所有 TextBox 控件并给它赋值为 string.Empty
2015/12/03 面试题
写给女朋友的道歉信
2014/01/08 职场文书
档案检查欢迎词
2014/01/13 职场文书
大学生社会实践方案
2014/05/11 职场文书
社区党建工作方案
2014/06/10 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
学校端午节活动总结
2015/02/11 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
暑期辅导班宣传单
2015/07/14 职场文书
vue中三级导航的菜单权限控制
2021/03/31 Vue.js
Java8中Stream的一些神操作
2021/11/02 Java/Android