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用ConfigObj读写配置文件的实现代码
Mar 04 Python
使用Python3 编写简单信用卡管理程序
Dec 21 Python
python3爬取淘宝信息代码分析
Feb 10 Python
Python元组拆包和具名元组解析实例详解
Mar 26 Python
Python获取二维矩阵每列最大值的方法
Apr 03 Python
Python爬虫使用脚本登录Github并查看信息
Jul 16 Python
基于Python在MacOS上安装robotframework-ride
Dec 28 Python
Python3实现的判断回文链表算法示例
Mar 08 Python
wxPython实现文本框基础组件
Nov 18 Python
python 初始化一个定长的数组实例
Dec 02 Python
基于YUV 数据格式详解及python实现方式
Dec 09 Python
django filter过滤器实现显示某个类型指定字段不同值方式
Jul 16 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执行速度全攻略(上)
2006/10/09 PHP
聊天室php&amp;mysql(二)
2006/10/09 PHP
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
EasyUi tabs的高度与宽度根据IE窗口的变化自适应代码
2010/10/26 Javascript
你未必知道的JavaScript和CSS交互的5种方法
2014/04/02 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
基于socket.io+express实现多房间聊天
2016/03/17 Javascript
jQuery 的 ready()的纯js替代方法
2016/11/20 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
Vue 过渡实现轮播图效果
2017/03/27 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
2017/08/17 jQuery
vue vuex vue-rouert后台项目——权限路由(适合初学)
2017/12/29 Javascript
AngularJS 应用模块化的使用
2018/04/04 Javascript
微信小程序模拟cookie的实现
2018/06/20 Javascript
webpack4 + react 搭建多页面应用示例
2018/08/03 Javascript
在小程序/mpvue中使用flyio发起网络请求的方法
2018/09/13 Javascript
vue实现移动端悬浮窗效果
2018/12/01 Javascript
JS实现点击生成UUID的方法完整实例【基于jQuery】
2019/06/12 jQuery
深入解读Node.js中的koa源码
2019/06/17 Javascript
JS数组索引检测中的数据类型问题详解
2021/01/11 Javascript
python爬取微信公众号文章的方法
2019/02/26 Python
Python常用模块sys,os,time,random功能与用法实例分析
2020/01/07 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
python语言是免费还是收费的?
2020/06/15 Python
python对execl 处理操作代码
2020/06/22 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
介绍一些UNIX常用简单命令
2014/11/11 面试题
师德学习感言
2014/01/31 职场文书
档案室主任岗位职责
2014/02/12 职场文书
协商一致解除劳动合同协议书
2014/09/14 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
2016年度员工工作表现评语
2015/12/02 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
详解Spring Boot使用系统参数表提升系统的灵活性
2021/06/30 Java/Android
基于Python和openCV实现图像的全景拼接详细步骤
2021/10/05 Python