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中的私有属性
Aug 21 Python
Python实现批量修改文件名实例
Jul 08 Python
Python进度条实时显示处理进度的示例代码
Jan 30 Python
Python爬虫工程师面试问题总结
Mar 22 Python
取numpy数组的某几行某几列方法
Apr 03 Python
Python中GIL的使用详解
Oct 03 Python
Python运维开发之psutil库的使用详解
Oct 18 Python
python实现随机漫步方法和原理
Jun 10 Python
解析python的局部变量和全局变量
Aug 15 Python
Python安装依赖(包)模块方法详解
Feb 14 Python
tensorflow2.0的函数签名与图结构(推荐)
Apr 28 Python
OpenCV-Python实现图像平滑处理操作
Jun 08 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
PHP中extract()函数的定义和用法
2012/08/17 PHP
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
ThinkPHP调用百度翻译类实现在线翻译
2014/06/26 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
Symfony核心类概述
2016/03/17 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
AJAX跨域请求json数据的实现方法
2013/11/11 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
JavaScript实现文字跟随鼠标特效
2015/08/06 Javascript
JavaScript禁止复制与粘贴的实现代码
2016/05/16 Javascript
JavaScript导航脚本判断当前导航
2016/07/12 Javascript
js实现一个简单的数字时钟效果
2017/03/29 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
html中通过JS获取JSON数据并加载的方法
2017/11/30 Javascript
JS交互点击WKWebView中的图片实现预览效果
2018/01/05 Javascript
使用Layer组件弹出多个对话框(非嵌套)与关闭及刷新的例子
2019/09/25 Javascript
linux系统使用python监测系统负载脚本分享
2014/01/15 Python
python设计模式大全
2016/06/27 Python
python读取文件名称生成list的方法
2018/04/27 Python
Python supervisor强大的进程管理工具的使用
2019/04/24 Python
python requests使用socks5的例子
2019/07/25 Python
python中@property和property函数常见使用方法示例
2019/10/21 Python
matlab中二维插值函数interp2的使用详解
2020/04/22 Python
毕业生医学检验求职信
2013/10/16 职场文书
个人素质的自我评价分享
2013/12/16 职场文书
网络技术专业求职信
2014/07/13 职场文书
思想作风整顿个人剖析材料
2014/10/06 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
世界环境日活动总结
2015/02/11 职场文书
初中政治教师教学反思
2016/02/23 职场文书
vue3使用vue-router的完整步骤记录
2021/06/20 Vue.js
「魔法少女伊莉雅」美游粘土人开订
2022/03/21 日漫
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle
mysql查看表结构的三种方法总结
2022/07/07 MySQL