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遍历C盘dll文件的方法
May 06 Python
Python3实现将文件归档到zip文件及从zip文件中读取数据的方法
May 22 Python
Python3读取zip文件信息的方法
May 22 Python
python爬虫框架talonspider简单介绍
Jun 09 Python
将TensorFlow的模型网络导出为单个文件的方法
Apr 23 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
linux查找当前python解释器的位置方法
Feb 20 Python
解决python中使用PYQT时中文乱码问题
Jun 17 Python
Python Pandas 箱线图的实现
Jul 23 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 Python
Python网页解析器使用实例详解
May 30 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
Mac环境下php操作mysql数据库的方法分享
2015/05/11 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
Prototype Object对象 学习
2009/07/12 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
jquery简单实现滚动条下拉DIV固定在头部不动
2013/11/25 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
最细致的vue.js基础语法 值得收藏!
2016/11/03 Javascript
angular或者js怎么确定选中ul中的哪几个li
2017/08/16 Javascript
JavaScript捕捉事件和阻止冒泡事件实例分析
2018/08/03 Javascript
jQuery实现获取当前鼠标位置并输出功能示例
2019/01/05 jQuery
Webpack5正式发布,有哪些新特性
2020/10/12 Javascript
微信小程序实现首页弹出广告
2020/12/03 Javascript
Python函数式编程指南(二):从函数开始
2015/06/24 Python
Python入门教程之运算符与控制流
2016/08/17 Python
Python装饰器用法实例总结
2018/02/07 Python
python获取代理IP的实例分享
2018/05/07 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
python  文件的基本操作 菜中菜功能的实例代码
2019/07/17 Python
解决Pycharm 导入其他文件夹源码的2种方法
2020/02/12 Python
Django实现任意文件上传(最简单的方法)
2020/06/03 Python
python获取时间戳的实现示例(10位和13位)
2020/09/23 Python
python代码实现猜拳小游戏
2020/11/30 Python
谈一谈HTML5本地存储技术
2016/03/02 HTML / CSS
美国在线珠宝商店:SZUL
2017/02/11 全球购物
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
优秀经理事迹材料
2014/02/01 职场文书
白酒市场营销方案
2014/02/25 职场文书
运动会口号大全
2014/06/07 职场文书
干部对照检查材料范文
2014/08/26 职场文书
优秀党支部申报材料
2014/12/24 职场文书
五年级小学生评语
2014/12/26 职场文书
入党转正申请报告
2015/05/15 职场文书
学校后勤工作总结2015
2015/05/15 职场文书
VUE使用draggable实现组件拖拽
2022/04/06 Vue.js