详解利用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标准库之sqlite3使用实例
Nov 25 Python
Python RuntimeError: thread.__init__() not called解决方法
Apr 28 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
Jun 21 Python
Python导出DBF文件到Excel的方法
Jul 25 Python
Python爬虫实现百度图片自动下载
Feb 04 Python
在PyCharm环境中使用Jupyter Notebook的两种方法总结
May 24 Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 Python
python基于json文件实现的gearman任务自动重启代码实例
Aug 13 Python
Python版中国省市经纬度
Feb 11 Python
python matplotlib imshow热图坐标替换/映射实例
Mar 14 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
Mar 25 Python
Python写情书? 10行代码展示如何把情书写在她的照片里
Apr 21 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
IP攻击升级,程序改进以对付新的攻击
2010/11/23 PHP
探讨:parse url解析URL,返回其组成部分
2013/06/14 PHP
PHP中使用curl入门教程
2015/07/02 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
php屏蔽错误及提示的方法
2020/05/10 PHP
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
2013/11/29 Javascript
原生的html元素选择器类似jquery选择器
2014/10/15 Javascript
jQuery中prepend()方法用法实例
2014/12/25 Javascript
再谈JavaScript线程
2015/07/10 Javascript
JavaScript 模块的循环加载实现方法
2015/12/13 Javascript
js实现(全选)多选按钮的方法【附实例】
2016/03/30 Javascript
原生js实现水平方向无缝滚动
2017/01/10 Javascript
bootstrap table表格使用方法详解
2017/04/26 Javascript
vue2.0 axios前后端数据处理实例代码
2017/06/30 Javascript
webpack+vue中使用别名路径引用静态图片地址
2017/11/20 Javascript
vue 实现数字滚动增加效果的实例代码
2018/07/06 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
JS学习笔记之原型链和利用原型实现继承详解
2019/05/29 Javascript
[59:42]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python自动连接ssh的方法
2015/03/07 Python
python实现查找两个字符串中相同字符并输出的方法
2015/07/11 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
简单了解OpenCV是个什么东西
2017/11/10 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
外科实习自我鉴定
2013/10/06 职场文书
工程监理应届生求职信
2013/11/09 职场文书
档案管理员岗位职责
2013/12/01 职场文书
文艺部部长竞选稿
2015/11/21 职场文书
python生成可执行exe控制Microsip自动填写号码并拨打功能
2021/06/21 Python
用JS写一个发布订阅模式
2021/11/07 Javascript