详解利用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学习资料
Feb 08 Python
python 图片验证码代码分享
Jul 04 Python
web.py获取上传文件名的正确方法
Aug 26 Python
将Python的Django框架与认证系统整合的方法
Jul 24 Python
Windows 64位下python3安装nltk模块
Sep 19 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
Python 保存矩阵为Excel的实现方法
Jan 28 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
python GUI模拟实现计算器
Jun 22 Python
Pytorch 高效使用GPU的操作
Jun 27 Python
Python map及filter函数使用方法解析
Aug 06 Python
python中的random模块和相关函数详解
Apr 22 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
php读取javascript设置的cookies的代码
2010/04/12 PHP
PHP学习之字符串比较和查找
2011/04/17 PHP
简单说说PHP优化那些事(经验分享)
2014/11/27 PHP
Function.prototype.bind用法示例
2013/09/16 Javascript
Javascript call和apply区别及使用方法
2013/11/14 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
用jquery.sortElements实现table排序
2014/05/04 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
全面解析DOM操作和jQuery实现选项移动操作代码分享
2016/06/07 Javascript
Nodejs多站点切换Htpps协议详解及简单实例
2017/02/23 NodeJs
微信实现自动跳转到用其他浏览器打开指定APP下载
2019/02/15 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
python创建和删除目录的方法
2015/04/29 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
如何通过python画loss曲线的方法
2019/06/26 Python
python实现批量修改文件名
2020/03/23 Python
python3.7调试的实例方法
2020/07/21 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
Python调用ffmpeg开源视频处理库,批量处理视频
2020/11/16 Python
突袭HTML5之Javascript API扩展1—Web Worker异步执行及相关概述
2013/01/31 HTML / CSS
Carter’s OshKosh加拿大:购买婴幼儿服装和童装
2018/11/27 全球购物
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
护士自我鉴定
2013/10/23 职场文书
小区门卫的岗位职责
2014/09/26 职场文书
学生上课说话检讨书
2014/10/25 职场文书
公司年会开场白
2015/06/01 职场文书
社区干部培训心得体会
2016/01/06 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
ajax请求前端跨域问题原因及解决方案
2021/10/16 Javascript
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers