详解利用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群发邮件实例代码
Jan 03 Python
Python遍历目录的4种方法实例介绍
Apr 13 Python
Python获取系统默认字符编码的方法
Jun 04 Python
Python中的错误和异常处理简单操作示例【try-except用法】
Jul 25 Python
Python程序运行原理图文解析
Feb 10 Python
Flask-WTF表单的使用方法
Jul 12 Python
python中resample函数实现重采样和降采样代码
Feb 25 Python
django rest framework serializer返回时间自动格式化方法
Mar 31 Python
Selenium向iframe富文本框输入内容过程图解
Apr 10 Python
Django中FilePathField字段的用法
May 21 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
PHP生成带有雪花背景的验证码
2006/10/09 PHP
mysql 的 like 问题,超强毕杀记!!!
2007/01/18 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
php获取ajax的headers方法与内容实例
2017/12/27 PHP
PHP设计模式之适配器模式原理与用法分析
2018/04/25 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
php常用经典函数集锦【数组、字符串、栈、队列、排序等】
2019/08/23 PHP
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
js 格式化时间日期函数小结
2010/03/20 Javascript
jQuery实战之品牌展示列表效果
2011/04/10 Javascript
javascript实现的网站访问量统计代码
2015/12/20 Javascript
JavaScript事件处理的方式(三种)
2016/04/26 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
详解Nuxt.js Vue服务端渲染摸索
2018/02/08 Javascript
详解可以用在VS Code中的正则表达式小技巧
2019/05/14 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
再也不怕 JavaScript 报错了,怎么看怎么处理都在这儿
2020/12/09 Javascript
[03:05]DOTA2英雄基础教程 嗜血狂魔
2013/12/10 DOTA
web.py 十分钟创建简易博客实现代码
2016/04/22 Python
pymysql的简单封装代码实例
2020/01/08 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
通过实例解析Python return运行原理
2020/03/04 Python
Anaconda和ipython环境适配的实现
2020/04/22 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
泰国网上购物:Shopee泰国
2018/09/14 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
世界排名第一的运动鞋市场:Flight Club
2020/01/03 全球购物
关于学习的演讲稿
2014/05/10 职场文书
旷工辞退通知书
2015/04/17 职场文书
考勤制度通知
2015/04/25 职场文书
心得体会格式及范文
2016/01/25 职场文书
python 离散点图画法的实现
2022/04/01 Python