详解利用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 thread 并发且顺序运行示例
Apr 09 Python
Python max内置函数详细介绍
Nov 17 Python
Python3实现发送QQ邮件功能(html)
Dec 15 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
对dataframe数据之间求补集的实例详解
Jan 30 Python
Python绘制频率分布直方图的示例
Jul 08 Python
利用Python进行图像的加法,图像混合(附代码)
Jul 14 Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 Python
无需压缩软件,用python帮你操作压缩包
Aug 17 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
Python基础之字符串格式化详解
Apr 21 Python
python神经网络Xception模型
May 06 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
Windows下安装Memcached的步骤说明
2010/04/25 PHP
PHP中输出转义JavaScript代码的实现代码
2011/04/22 PHP
php实现的网络相册图片防盗链完美破解方法
2015/07/01 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
PHP上传文件及图片到七牛的方法
2018/07/25 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
2019/10/16 PHP
js 绑定带参数的事件以及手动触发事件
2010/04/27 Javascript
js加载之使用DOM方法动态加载Javascript文件
2013/11/08 Javascript
jquery和雅虎的yql服务实现天气预报服务示例
2014/02/08 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
2014/04/15 Javascript
Nodejs实现的一个简单udp广播服务器、客户端
2014/09/25 NodeJs
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
js钢琴按钮波浪式图片排列效果代码分享
2015/08/26 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
常用的js验证和数据处理总结
2016/08/02 Javascript
浅谈jQuery hover(over, out)事件函数
2016/12/03 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
原生js中ajax访问的实例详解
2017/09/19 Javascript
JS对象属性的检测与获取操作实例分析
2020/03/17 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
[44:50]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第二局
2016/02/26 DOTA
[01:10:30]DOTA2-DPC中国联赛正赛 Dragon vs Dynasty BO3 第一场 3月4日
2021/03/11 DOTA
使用Python实现一个简单的项目监控
2015/03/31 Python
Python进行数据科学工作的简单入门教程
2015/04/01 Python
python抓取需要扫微信登陆页面
2019/04/29 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
python不相等的两个字符串的 if 条件判断为True详解
2020/03/12 Python
环卫工人先进事迹材料
2014/06/02 职场文书
银行金融服务方案
2014/06/11 职场文书
2014年团员学习十八大思想汇报
2014/09/13 职场文书
秦兵马俑导游词
2015/02/02 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
中学图书馆工作总结
2015/08/11 职场文书
如何用Node.js编写内存效率高的应用程序
2021/04/30 Javascript
深入解读Java三大集合之map list set的用法
2021/11/11 Java/Android