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压缩和解压缩zip文件的教程
May 06 Python
python读取excel表格生成erlang数据
Aug 26 Python
Python实现基本数据结构中队列的操作方法示例
Dec 04 Python
1 行 Python 代码快速实现 FTP 服务器
Jan 25 Python
pandas带有重复索引操作方法
Jun 08 Python
python 异或加密字符串的实例
Oct 14 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
JupyterNotebook 输出窗口的显示效果调整方法
Apr 13 Python
详解python中的lambda与sorted函数
Sep 04 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
python实现A*寻路算法
Jun 13 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
用Socket发送电子邮件
2006/10/09 PHP
php json转换相关知识(小结)
2018/12/21 PHP
javascript 运算数的求值顺序
2011/08/23 Javascript
浅谈Javascript事件处理程序的几种方式
2012/06/27 Javascript
页面回到顶部的三种实现(锚标记,js)
2012/10/01 Javascript
JavaScript?Apple设备检测示例代码
2013/11/15 Javascript
分享28款免费实用的 JQuery 图片和内容滑块插件
2014/12/15 Javascript
jQuery多级弹出菜单插件ZoneMenu
2014/12/18 Javascript
Js调用Java方法并互相传参的简单实例
2016/08/11 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
2017/07/05 jQuery
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
vue实现lodop打印功能的示例
2020/11/11 Javascript
Python的Django框架中的表单处理示例
2015/07/17 Python
详解django中使用定时任务的方法
2018/09/27 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
python tools实现视频的每一帧提取并保存
2020/03/20 Python
jupyter notebook 中输出pyecharts图实例
2020/04/23 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
关于多元线性回归分析——Python&amp;SPSS
2020/02/24 Python
python实现录屏功能(亲测好用)
2020/03/02 Python
使用CSS媒体查询(Media Queries)和JavaScript判断浏览器设备类型的方法
2014/04/03 HTML / CSS
html5 canvas-2.用canvas制作一个猜字母的小游戏
2013/01/07 HTML / CSS
HTML5 虚拟键盘出现挡住输入框的解决办法
2017/02/14 HTML / CSS
护理学毕业生自荐信
2013/10/02 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
利群广告词
2014/03/20 职场文书
企业家王石演讲稿:坚持与放下
2014/04/27 职场文书
爱心倡议书范文
2014/05/12 职场文书
最美护士演讲稿
2014/08/27 职场文书
保密工作承诺书
2014/08/29 职场文书
安全生产月标语
2014/10/07 职场文书
2015年办公室工作总结范文
2015/03/31 职场文书
2015年幼儿园学前班工作总结
2015/05/18 职场文书
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2021/04/24 Python
 分享一个Python 遇到数据库超好用的模块
2022/04/06 Python