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 18 Python
Python实现代码统计工具(终极篇)
Jul 04 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
Python编程实现及时获取新邮件的方法示例
Aug 10 Python
使用pygame模块编写贪吃蛇的实例讲解
Feb 05 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
Jun 11 Python
WxPython建立批量录入框窗口
Feb 27 Python
python 实现矩阵填充0的例子
Nov 29 Python
Python实现像awk一样分割字符串
Sep 15 Python
解决python的空格和tab混淆而报错的问题
Feb 26 Python
opencv实现图像平移效果
Mar 24 Python
Python答题卡识别并给出分数的实现代码
Jun 22 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 session处理的定制
2009/03/16 PHP
深入理解PHP之数组(遍历顺序)  Laruence原创
2012/06/13 PHP
php 获取文件行数的方法总结
2016/10/11 PHP
PHP中的多种加密技术及代码示例解析
2016/10/20 PHP
PHP中Session ID的实现原理实例分析
2019/08/17 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
javascript call方法使用说明
2010/01/11 Javascript
妙用Jquery的val()方法
2012/06/27 Javascript
JS弹出层的显示与隐藏示例代码
2013/12/27 Javascript
jQuery中:radio选择器用法实例
2015/01/03 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
javaScript基础详解
2017/01/19 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
JS身份证信息验证正则表达式
2017/06/12 Javascript
微信JSSDK调用微信扫一扫功能的方法
2017/07/25 Javascript
vue实现提示保存后退出的方法
2018/03/15 Javascript
vue+element-ui实现表格编辑的三种实现方式
2018/10/31 Javascript
Node.js JSON模块用法实例分析
2019/01/04 Javascript
layui点击左侧导航栏,实现不刷新整个页面,只刷新局部的方法
2019/09/25 Javascript
python实现媒体播放器功能
2018/02/11 Python
Python re 模块findall() 函数返回值展现方式解析
2019/08/09 Python
django之自定义软删除Model的方法
2019/08/14 Python
python基于opencv 实现图像时钟
2021/01/04 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
css3编写浏览器背景渐变背景色的方法
2018/03/05 HTML / CSS
浅谈HTML5 defer和async的区别
2016/06/07 HTML / CSS
中软Java笔试题
2012/11/11 面试题
工程质量承诺书
2014/03/27 职场文书
公职人员索取回扣检举信
2014/04/04 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
学校周年庆活动方案
2014/08/22 职场文书
武侯祠导游词
2015/02/04 职场文书
新员工辞职信范文
2015/05/12 职场文书