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实现对PPT文件进行截图操作的方法
Apr 28 Python
Python实现数据库编程方法详解
Jun 09 Python
Python的Django REST框架中的序列化及请求和返回
Apr 11 Python
python3 shelve模块的详解
Jul 08 Python
Python实现的插入排序算法原理与用法实例分析
Nov 22 Python
Django 2.0版本的新特性抢先看!
Jan 05 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
django的model操作汇整详解
Jul 26 Python
Python+redis通过限流保护高并发系统
Apr 15 Python
python实现图像高斯金字塔的示例代码
Dec 11 Python
python内置进制转换函数的操作
Jun 02 Python
Python 如何将integer转化为罗马数(3999以内)
Jun 05 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
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
PHP 类与构造函数解析
2017/02/06 PHP
php + nginx项目中的权限详解
2017/05/23 PHP
php实现将数据做成json的格式给前端使用
2018/08/21 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
jQuery中removeProp()方法用法实例
2015/01/05 Javascript
Javascript中With语句用法实例
2015/05/14 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
vue router路由嵌套不显示问题的解决方法
2017/06/17 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
解决vue自定义指令导致的内存泄漏问题
2020/08/04 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
Python合并字典键值并去除重复元素的实例
2016/12/18 Python
一百行python代码将图片转成字符画
2021/02/19 Python
使用Python快速制作可视化报表的方法
2019/02/03 Python
python+pyqt5编写md5生成器
2019/03/18 Python
python实现FTP循环上传文件
2020/03/20 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
什么是python的函数体
2020/06/19 Python
如何用 Python 处理不平衡数据集
2021/01/04 Python
长青弘远的面试题
2012/06/09 面试题
超市开学活动方案
2014/03/01 职场文书
民生工程实施方案
2014/03/22 职场文书
淘宝客服专员岗位职责
2014/04/11 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
2015年档案室工作总结
2015/05/23 职场文书
政审证明材料
2015/06/19 职场文书
无违反计划生育证明格式
2015/06/24 职场文书
基于go interface{}==nil 的几种坑及原理分析
2021/04/24 Golang
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
英镑符号 £
2022/02/17 杂记