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代码调试的几种方法总结
Apr 15 Python
Python实现程序的单一实例用法分析
Jun 03 Python
python中set常用操作汇总
Jun 30 Python
对python中的logger模块全面讲解
Apr 28 Python
Python实现使用卷积提取图片轮廓功能示例
May 12 Python
Python 字符串换行的多种方式
Sep 06 Python
python实现WebSocket服务端过程解析
Oct 18 Python
用python中的matplotlib绘制方程图像代码
Nov 21 Python
Django 404、500页面全局配置知识点详解
Mar 10 Python
python将logging模块封装成单独模块并实现动态切换Level方式
May 12 Python
如何使用python记录室友的抖音在线时间
Jun 29 Python
python 解决函数返回return的问题
Dec 05 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
第五节--克隆
2006/11/16 PHP
php中取得文件的后缀名?
2012/02/20 PHP
Laravel 4 初级教程之视图、命名空间、路由
2014/10/30 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
编写PHP脚本过滤用户上传的图片
2015/07/03 PHP
PHP设计模式之工厂模式与单例模式
2016/09/28 PHP
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
javaScript 关闭浏览器 (不弹出提示框)
2010/01/31 Javascript
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
利用js读取动态网站从服务器端返回的数据
2014/02/10 Javascript
ActiveX控件与Javascript之间的交互示例
2014/06/04 Javascript
jquery实现选中单选按钮下拉伸缩效果
2015/08/06 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
Python网络爬虫出现乱码问题的解决方法
2017/01/05 Python
python中字符串比较使用is、==和cmp()总结
2018/03/18 Python
Python多继承原理与用法示例
2018/08/23 Python
Python常用特殊方法实例总结
2019/03/22 Python
python numpy 常用随机数的产生方法的实现
2019/08/21 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
用Python写一个自动木马程序
2019/09/17 Python
使用Python的Turtle绘制哆啦A梦实例
2019/11/21 Python
keras实现图像预处理并生成一个generator的案例
2020/06/17 Python
python代码区分大小写吗
2020/06/17 Python
Python绘制数码晶体管日期
2021/02/19 Python
经典商业广告词
2014/03/13 职场文书
学校对教师的评语
2014/04/28 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
上班迟到检讨书
2015/05/06 职场文书
革命电影观后感
2015/06/18 职场文书
小学班长竞选稿
2015/11/20 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
浅谈sql_@SelectProvider及使用注意说明
2021/08/04 Java/Android
Python编程super应用场景及示例解析
2021/10/05 Python
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL