详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击


Posted in Python onOctober 09, 2018

一、在django后台处理

1、将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项目中会自带的。

MIDDLEWARE_CLASSES = [
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.middleware.csrf.CsrfViewMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
  'django.contrib.messages.middleware.MessageMiddleware', 
]

2、在templete的html页的from中添加{% csrf %},后台重定向语法如下:

return render_to_response(xxx.html', context_instance=RequestContext(request))

二、前端处理

对所有的ajax请求加上以下语句:

$(function () {
  $.ajaxSetup({
    data: {csrfmiddlewaretoken: '{{ csrf_token }}'},
  });
})

这样向后台的请求都会带django生成的那个csrf_token值。中间件csrf模块会截取判断csrf_token值是否一致,如果一致则请求合法。

三、对于ajax的复杂对象,例如[{"id":"001","name":"小明"},{"id":"002","name":"小军"}].,后台post的处理

必须将这种对象转化为json格式传到后台,后台在反序列化即可。(不要用ajax的其他序列化格式,其深度序列化后,django后台解析比较困难)

contentType不需要指定utf-8,否则post解析出错

四、csrf攻击与预防

csrf利用session和cookie的时效性进行攻击。他会获取请求的cookie,在session时效内进行请求。因此对于重要信息,重要功能进行单次请求处理。即请求一次失效。

例如:请求头中加入验证token信息,用完即失效。django的中间件csrf_token就是此原理防止的。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现数值积分的Simpson方法实例分析
Jun 05 Python
Python实现的使用telnet登陆聊天室实例
Jun 17 Python
Python获取央视节目单的实现代码
Jul 25 Python
Python3实现Web网页图片下载
Jan 28 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
int在python中的含义以及用法
Jun 27 Python
python+logging+yaml实现日志分割
Jul 22 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
Python爬虫之urllib基础用法教程
Oct 12 Python
Python 从attribute到property详解
Mar 05 Python
python类共享变量操作
Sep 03 Python
详解如何将python3.6软件的py文件打包成exe程序
Oct 09 #Python
让代码变得更易维护的7个Python库
Oct 09 #Python
windows下cx_Freeze生成Python可执行程序的详细步骤
Oct 09 #Python
Python打包方法Pyinstaller的使用
Oct 09 #Python
Python如何发布程序的详细教程
Oct 09 #Python
python如何发布自已pip项目的方法步骤
Oct 09 #Python
Django csrf 验证问题的实现
Oct 09 #Python
You might like
PHP4(windows版本)中的COM函数
2006/10/09 PHP
php下图片文字混合水印与缩略图实现代码
2009/12/11 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
php使用CutyCapt实现网页截图保存的方法
2016/10/03 PHP
PHP查询分页的实现代码
2017/06/09 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
PHP实现链式操作的三种方法详解
2017/11/16 PHP
(转载)JavaScript中匿名函数,函数直接量和闭包
2007/05/08 Javascript
javascript 原型继承介绍
2011/08/30 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
开发插件的两个方法jquery.fn.extend与jquery.extend
2013/11/21 Javascript
基于BootStrap实现局部刷新分页实例代码
2016/08/08 Javascript
jQuery使用方法
2017/02/04 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
详解10分钟学会vue滚动行为
2017/09/21 Javascript
vue-cli 默认路由再子路由选中下的选中状态问题及解决代码
2018/09/06 Javascript
Javascript中弹窗confirm与prompt的区别
2018/10/26 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
微信小程序template模板与component组件的区别和使用详解
2019/05/22 Javascript
vue cli安装使用less的教程详解
2019/07/12 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
Vue-cli 移动端布局和动画使用详解
2020/08/10 Javascript
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
[53:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma BO3 第一场 1月31日
2021/03/11 DOTA
python读取Android permission文件
2013/11/01 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
对python中raw_input()和input()的用法详解
2018/04/22 Python
Python正则表达式实现简易计算器功能示例
2019/05/07 Python
后勤部长岗位职责
2013/12/14 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
中式婚礼主持词
2014/03/13 职场文书
公司委托书格式
2014/08/01 职场文书
保护环境建议书作文400字
2015/09/14 职场文书
Nginx+Windows搭建域名访问环境的操作方法
2022/03/17 Servers