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使用PyGame播放Midi和Mp3文件的方法
Apr 24 Python
详解Python的Django框架中的templates设置
May 11 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
Python 正则表达式实现计算器功能
Apr 29 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
对pandas中两种数据类型Series和DataFrame的区别详解
Nov 12 Python
对python requests发送json格式数据的实例详解
Dec 19 Python
Python基于opencv实现的简单画板功能示例
Mar 04 Python
python ffmpeg任意提取视频帧的方法
Feb 21 Python
python re.match()用法相关示例
Jan 27 Python
利用python做表格数据处理
Apr 13 Python
Python基础之元类详解
Apr 29 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
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
2014/02/18 PHP
PHP代码优化技巧小结
2015/09/29 PHP
PHP实现无限级分类(不使用递归)
2015/10/22 PHP
PHP基于单例模式实现的数据库操作基类
2016/01/15 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
jquery 表单取值常用代码
2009/12/22 Javascript
jQuery+CSS实现菜单滑动伸展收缩(仿淘宝)
2013/03/22 Javascript
jquery可见性过滤选择器使用示例
2013/06/24 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
jQuery动画显示和隐藏效果实例演示(附demo源码下载)
2015/12/31 Javascript
jQuery添加和删除输入文本框标签代码
2016/05/20 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
vue 里面使用axios 和封装的示例代码
2017/09/01 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
Vue3.0结合bootstrap创建多页面应用
2019/05/28 Javascript
python遍历目录的方法小结
2016/04/28 Python
Python列表推导式与生成器表达式用法示例
2018/02/08 Python
详解python中asyncio模块
2018/03/03 Python
pandas数值计算与排序方法
2018/04/12 Python
python threading和multiprocessing模块基本用法实例分析
2019/07/25 Python
Python requests.post方法中data与json参数区别详解
2020/04/30 Python
Python extract及contains方法代码实例
2020/09/11 Python
基于html5 DeviceOrientation 实现微信摇一摇功能
2015/09/25 HTML / CSS
美国正宗奢华复古手袋、珠宝及配饰网站:What Goes Around Comes Around
2018/07/21 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
最新大学毕业求职简历的自我评价
2013/10/18 职场文书
业务员岗位职责
2013/11/16 职场文书
信息专业大学生自我评价分享
2014/01/17 职场文书
教师研修随笔感言
2014/01/23 职场文书
公司介绍信范文
2015/01/31 职场文书
医院志愿者活动总结
2015/05/06 职场文书
SQL基础的查询语句
2021/11/11 MySQL
Java实现添加条码或二维码到Word文档
2022/06/01 Java/Android