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中使用mysql数据库详细介绍
Mar 27 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
python生成器与迭代器详解
Jan 01 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 Python
Python环境下安装PyGame和PyOpenGL的方法
Mar 25 Python
python爬虫使用正则爬取网站的实现
Aug 03 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
python中的split、rsplit、splitlines用法说明
Oct 23 Python
使用python创建股票的时间序列可视化分析
Mar 03 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
require(),include(),require_once()和include_once()的异同
2007/01/02 PHP
在PHP中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
2010/02/21 PHP
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
Yaf框架封装的MySQL数据库操作示例
2019/03/06 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
js优化针对IE6.0起作用(详细整理)
2012/12/25 Javascript
Jquery实现仿新浪微博获取文本框能输入的字数代码
2013/02/22 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
jQuery学习笔记之Ajax用法实例详解
2015/12/01 Javascript
JS实现移动端按首字母检索城市列表附源码下载
2017/07/05 Javascript
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
Vue 自定义动态组件实例详解
2018/03/28 Javascript
JavaScript累加、迭代、穷举、递归等常用算法实例小结
2018/05/08 Javascript
Vue如何实现响应式系统
2018/07/11 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
2019/05/21 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
react-native 实现购物车滑动删除效果的示例代码
2021/01/15 Javascript
用smtplib和email封装python发送邮件模块类分享
2014/02/17 Python
python内存管理机制原理详解
2019/08/12 Python
python实现五子棋程序
2020/04/24 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
介绍一下HTTP、HTTPS和SSL
2012/12/16 面试题
党员个人对照检查材料范文
2014/09/24 职场文书
项目安全员岗位职责
2015/02/15 职场文书
自我推荐信格式模板
2015/03/24 职场文书
地道战观后感500字
2015/06/04 职场文书
有关水浒传的读书笔记
2015/06/25 职场文书
教师节联欢会主持词
2015/07/04 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python
Go web入门Go pongo2模板引擎
2022/05/20 Golang