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开发中如何使用Hook技巧
Nov 01 Python
Python生成任意范围任意精度的随机数方法
Apr 09 Python
python实现读取大文件并逐行写入另外一个文件
Apr 19 Python
Django压缩静态文件的实现方法详析
Aug 26 Python
Python中__slots__属性介绍与基本使用方法
Sep 05 Python
python scp 批量同步文件的实现方法
Jan 03 Python
Python安装与基本数据类型教程详解
May 29 Python
python实现大量图片重命名
Mar 23 Python
如何基于python操作json文件获取内容
Dec 24 Python
python爬虫模拟浏览器访问-User-Agent过程解析
Dec 28 Python
基于python代码批量处理图片resize
Jun 04 Python
python 利用opencv实现图像网络传输
Nov 12 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-accelerator网站加速PHP缓冲的方法
2008/07/30 PHP
PHP时间戳 strtotime()使用方法和技巧
2013/10/29 PHP
php循环创建目录示例分享(php创建多级目录)
2014/03/04 PHP
php发送与接收流文件的方法
2015/02/11 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
6个常见的 PHP 安全性攻击实例和阻止方法
2020/12/16 PHP
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
JavaScript实现按Ctrl键打开新页面
2014/09/04 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
JS中多种方式创建对象详解
2016/03/22 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
Node.js 8 中的重要新特性
2017/06/28 Javascript
vue filters的使用详解
2018/06/11 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
Vue自定义属性实例分析
2019/02/23 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
[02:23]2016国际邀请赛中国区预选赛wings晋级之路
2016/06/29 DOTA
[02:27]2018DOTA2亚洲邀请赛趣味视频之钓鱼大赛 谁是垂钓冠军?
2018/04/05 DOTA
详解Python中列表和元祖的使用方法
2015/04/25 Python
Python计算斗牛游戏概率算法实例分析
2017/09/26 Python
Scrapy抓取京东商品、豆瓣电影及代码分享
2017/11/23 Python
python实现txt文件格式转换为arff格式
2018/05/31 Python
PyQt5响应回车事件的方法
2019/06/25 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
Python实现Kerberos用户的增删改查操作
2020/12/14 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
活动策划邀请函
2014/02/06 职场文书
我的中国梦演讲稿1000字
2014/08/19 职场文书
纪检干部现实表现材料
2014/08/21 职场文书
安全责任书范文
2014/08/25 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL