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中的is和id用法分析
Jan 26 Python
python字典基本操作实例分析
Jul 11 Python
Python中死锁的形成示例及死锁情况的防止
Jun 14 Python
Python中装饰器高级用法详解
Dec 25 Python
Python读取Json字典写入Excel表格的方法
Jan 03 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
我用Python抓取了7000 多本电子书案例详解
Mar 25 Python
基于Python获取城市近7天天气预报
Nov 26 Python
Python如何访问字符串中的值
Feb 09 Python
解决numpy矩阵相减出现的负值自动转正值的问题
Jun 03 Python
Python利用folium实现地图可视化
May 23 Python
Python访问Redis的详细操作
Jun 26 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
gearman中任务的优先级和返回状态实例分析
2020/02/27 PHP
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
DWR Ext 加载数据
2009/03/22 Javascript
JavaScript继承方式实例
2010/10/29 Javascript
js中escape对应的C#解码函数 UrlDecode
2012/12/16 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
jquery实现动态画圆
2014/12/04 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
AngularJS+Node.js实现在线聊天室
2015/08/28 Javascript
基于javascript代码实现通过点击图片显示原图片
2015/11/29 Javascript
jQuery easyui的validatebox校验规则扩展及easyui校验框validatebox用法
2016/01/18 Javascript
jQuery实现简单的DIV拖动效果
2016/02/19 Javascript
require.js 加载 vue组件 r.js 合并压缩的实例
2016/10/14 Javascript
简单谈谈关于 npm 5.0 的新坑
2017/06/08 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
详解React Native 屏幕适配(炒鸡简单的方法)
2018/06/11 Javascript
解决vue attr取不到属性值的问题
2018/09/18 Javascript
angular使用md5,CryptoJS des加密的方法
2019/06/03 Javascript
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
Python map和reduce函数用法示例
2015/02/26 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
Python字符串拼接六种方法介绍
2017/12/18 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
对python append 与浅拷贝的实例讲解
2018/05/04 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
Python列表切片常用操作实例解析
2019/12/16 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
python中shell执行知识点
2020/05/06 Python
JavaScript+Canvas实现自定义画板的示例代码
2019/05/13 HTML / CSS
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
美国最大的电子宠物训练产品制造商:PetSafe
2018/10/12 全球购物
法人身份证明书
2014/10/08 职场文书
典型事迹材料范文
2014/12/29 职场文书
单位工资证明范本
2015/06/12 职场文书
2016年暑假学生家长评语
2015/12/01 职场文书