Django跨域请求CSRF的方法示例


Posted in Python onNovember 11, 2018

web跨域请求

1.为什么要有跨域限制

举个例子:

1.用户登录了自己的银行页面 http://mybank.com,http://mybank.com向用户的cookie中添加用户标识。
2.用户浏览了恶意页面 http://evil.com。执行了页面中的恶意AJAX请求代码。
3.http://evil.com向http://mybank.com发起AJAX HTTP请求,请求会默认把http://mybank.com对应cookie也同时发送过去。
4.银行页面从发送的cookie中提取用户标识,验证用户无误,response中返回请求数据。此时数据就泄露了。
5.而且由于Ajax在后台执行,用户无法感知这一过程。

以上就是所谓是CSRF(Cross-site request forgery)攻击,跨站请求伪造。接下来说一下 Django中处理csrf的方式

正常情况下直接发起一个psot请求,会报错。错误的意思是csrf校验失败,request请求被丢弃掉。

那么在django中的post失败有两种解决办法:

解决办法一:将csrf中间层注释掉

MIDDLEWARE = [
 
  'django.middleware.security.SecurityMiddleware',
 
  'django.contrib.sessions.middleware.SessionMiddleware',
 
  'django.middleware.common.CommonMiddleware',
 
#  'django.middleware.csrf.CsrfViewMiddleware',
 
  'django.contrib.auth.middleware.AuthenticationMiddleware',
 
  'django.contrib.messages.middleware.MessageMiddleware',
 
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
 
]

此时将不会进行csrf的校验,但如前面所述,这是一种不安全的行为。而且djano也不推荐使用

解决办法二:

在前面的提示中有这样一句话:

<form action="" method="post">{% csrf_token %}

也就是说在网页中加入csrf_token的标签就可以通过csrf校验

Django 提供的 CSRF 防护机制:

1、django 第一次响应来自某个客户端的请求时,会在服务器端随机生成一个 token,把这个 token 放在 cookie 里。然后每次 POST 请求都会带上这个 token,这样就能避免被 CSRF 攻击。

2、在返回的 HTTP 响应的 cookie 里,django 会为你添加一个 csrftoken 字段,其值为一个自动生成的 token,在所有的 POST 表单时,必须包含一个 csrfmiddlewaretoken 字段 (只需要在模板里加一个 tag, django 就会自动帮你生成,见下面)

3、在处理 POST 请求之前,django 会验证这个请求的 cookie 里的 csrftoken 字段的值和提交的表单里的 csrfmiddlewaretoken 字段的值是否一样。如果一样,则表明这是一个合法的请求,否则,这个请求可能是来自于别人的 csrf 攻击,返回 403 Forbidden.

4、在所有 ajax POST 请求里,添加一个 X-CSRFTOKEN header,其值为 cookie 里的 csrftoken 的值

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python自定义函数的创建、调用和函数的参数详解
Mar 11 Python
python 转换 Javascript %u 字符串为python unicode的代码
Sep 06 Python
python下载图片实现方法(超简单)
Jul 21 Python
python3.6根据m3u8下载mp4视频
Jun 17 Python
Python处理时间日期坐标轴过程详解
Jun 25 Python
Python+Pyqt实现简单GUI电子时钟
Feb 22 Python
Python使用itchat模块实现群聊转发,自动回复功能示例
Aug 26 Python
tensorflow mnist 数据加载实现并画图效果
Feb 05 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
Python通过len函数返回对象长度
Oct 22 Python
一篇文章教你用python画动态爱心表白
Nov 22 Python
浅析Python 中的 WSGI 接口和 WSGI 服务的运行
Dec 09 Python
Python rstrip()方法实例详解
Nov 11 #Python
python requests爬取高德地图数据的实例
Nov 10 #Python
Python爬取商家联系电话以及各种数据的方法
Nov 10 #Python
Python中的取模运算方法
Nov 10 #Python
在Python中获取两数相除的商和余数方法
Nov 10 #Python
Python解决两个整数相除只得到整数部分的实例
Nov 10 #Python
从DataFrame中提取出Series或DataFrame对象的方法
Nov 10 #Python
You might like
全国FM电台频率大全 - 20 广西省
2020/03/11 无线电
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
2014/07/05 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
php探针使用原理和技巧讲解
2019/09/17 PHP
在Laravel的Model层做数据缓存的实现
2019/09/26 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
jValidate 基于jQuery的表单验证插件
2009/12/12 Javascript
JavaScript Event学习第十章 一些可替换的事件对
2010/02/10 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
扩展js对象数组的OrderByAsc和OrderByDesc方法实现思路
2013/05/17 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
jQuery实现瀑布流布局
2014/12/12 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
2018/09/18 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
Vue函数式组件的应用实例详解
2019/08/30 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
python正常时间和unix时间戳相互转换的方法
2015/04/23 Python
Python+matplotlib+numpy绘制精美的条形统计图
2018/01/02 Python
Python实现的序列化和反序列化二叉树算法示例
2019/03/02 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
2019/08/22 Python
Django stark组件使用及原理详解
2019/08/22 Python
Django 解决开发自定义抛出异常的问题
2020/05/21 Python
python selenium xpath定位操作
2020/09/01 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
柏林通行证:Berlin Pass
2018/04/11 全球购物
英国剑桥包中文官网:The Cambridge Satchel Company中国
2018/11/06 全球购物
电话销售经理岗位职责
2013/12/07 职场文书
《争吵》教学反思
2014/02/15 职场文书
合作投资意向书
2014/04/01 职场文书
学校领导班子对照检查材料
2014/09/24 职场文书
给老婆的保证书
2015/01/16 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL