详解利用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 break语句详解
Mar 11 Python
Linux 发邮件磁盘空间监控(python)
Apr 23 Python
python3使用pyqt5制作一个超简单浏览器的实例
Oct 19 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
python爬虫的一个常见简单js反爬详解
Jul 09 Python
Django ORM 自定义 char 类型字段解析
Aug 09 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
python模块内置属性概念及实例
Feb 18 Python
Python-OpenCV教程之图像的位运算详解
Jun 21 Python
Python操作CSV格式文件的方法大全
Jul 15 Python
Python学习之os包使用教程详解
Mar 21 Python
python自动获取微信公众号最新文章的实现代码
Jul 15 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
用 PHP5 轻松解析 XML
2006/12/04 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
解决在Laravel 中处理OPTIONS请求的问题
2019/10/11 PHP
javascript两种function的定义介绍及区别说明
2013/05/02 Javascript
解决jquery1.9不支持browser对象的问题
2013/11/13 Javascript
jquery复选框checkbox实现删除前判断
2014/04/20 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
输入框点击时边框变色效果的实现方法
2016/12/26 Javascript
AngularJS的Filter的示例详解
2017/03/07 Javascript
Angular 2.0+ 的数据绑定的实现示例
2017/08/09 Javascript
IntelliJ IDEA 安装vue开发插件的方法
2017/11/21 Javascript
EasyUI的DataGrid绑定Json数据源的示例代码
2017/12/16 Javascript
在vscode中统一vue编码风格的方法
2018/02/22 Javascript
微信小程序背景音乐开发详解
2019/12/12 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
2020/02/20 Javascript
写给新手同学的vuex快速上手指北小结
2020/04/14 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
Python常用正则表达式符号浅析
2014/08/13 Python
Python threading多线程编程实例
2014/09/18 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
Python中类型关系和继承关系实例详解
2015/05/25 Python
python编程线性回归代码示例
2017/12/07 Python
详解flask入门模板引擎
2018/07/18 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
浅谈python3.6的tkinter运行问题
2019/02/22 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
Django使用消息提示简单的弹出个对话框实例
2019/11/15 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
python读取hdfs上的parquet文件方式
2020/06/06 Python
详解HTML5中的标签
2015/06/19 HTML / CSS
顶岗实习接收函
2014/01/09 职场文书
考博专家推荐信
2014/05/10 职场文书
餐馆开业致辞
2015/08/01 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书