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使用Tkinter显示网络图片的方法
Apr 24 Python
Python遍历指定文件及文件夹的方法
May 09 Python
详解Tensorflow数据读取有三种方式(next_batch)
Feb 01 Python
Python中property函数用法实例分析
Jun 04 Python
Python实现调用另一个路径下py文件中的函数方法总结
Jun 07 Python
Python实现的建造者模式示例
Aug 06 Python
tensorflow实现逻辑回归模型
Sep 08 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
python 如何将office文件转换为PDF
Sep 22 Python
解决pytorch 数据类型报错的问题
Mar 03 Python
python实现黄金分割法的示例代码
Apr 28 Python
详细介绍python类及类的用法
May 31 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
PHILIPS AE3805收音机的分析打磨
2021/03/02 无线电
使PHP自定义函数返回多个值
2006/11/26 PHP
PHP编程函数安全篇
2013/01/08 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
2019/12/01 PHP
JavaScript通过正则表达式实现表单验证电话号码
2014/03/07 Javascript
对之前写的jquery分页做下升级
2014/06/19 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
JavaScript DSL 流畅接口(使用链式调用)实例
2015/03/15 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
node错误处理与日志记录的实现
2018/12/24 Javascript
vue router 用户登陆功能的实例代码
2019/04/24 Javascript
[08:02]DOTA2牵红线 zhou神抱得美人归
2014/03/22 DOTA
Python实现批量读取word中表格信息的方法
2015/07/30 Python
python中的闭包函数
2018/02/09 Python
Python装饰器的执行过程实例分析
2018/06/04 Python
python清除字符串前后空格函数的方法
2018/10/21 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
python使用 cx_Oracle 模块进行查询操作示例
2019/11/28 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
细说CSS3中box属性中的overflow-x属性和overflow-y属性值的效果
2014/07/21 HTML / CSS
CPB肌肤之钥美国官网:Clé de Peau Beauté
2017/09/05 全球购物
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
英国女装网上商店:I Saw It First
2018/10/18 全球购物
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
借款协议书范本
2014/04/22 职场文书
公务员政审个人总结
2015/02/12 职场文书
开会通知短信大全
2015/04/20 职场文书
幼儿园教师个人工作总结2015
2015/05/12 职场文书
Python 图片添加美颜效果
2022/04/28 Python