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中文编码问题小结
Sep 28 Python
python BeautifulSoup设置页面编码的方法
Apr 03 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
解决python2.7用pip安装包时出现错误的问题
Jan 23 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
解决django中ModelForm多表单组合的问题
Jul 18 Python
简单了解django缓存方式及配置
Jul 19 Python
Python学习笔记之Break和Continue用法分析
Aug 14 Python
python selenium自动化测试框架搭建的方法步骤
Jun 14 Python
Python实现随机爬山算法
Jan 29 Python
教你怎么用Python处理excel实现自动化办公
Apr 30 Python
Python Pandas模块实现数据的统计分析的方法
Jun 24 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
相对路径转化成绝对路径
2007/04/10 PHP
简化php模板页面中分页代码的解析
2009/02/06 PHP
PHP的Yii框架中Model模型的学习教程
2016/03/29 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
PHP简单判断手机设备的方法
2016/08/23 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
javascript实现的listview效果
2007/04/28 Javascript
jquery.artwl.thickbox.js  一个非常简单好用的jQuery弹出层插件
2012/03/01 Javascript
几种设置表单元素中文本输入框不可编辑的方法总结
2013/11/25 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
JavaScript面向对象之私有静态变量实例分析
2016/01/14 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
2016/12/23 Javascript
Vue组件化开发思考
2018/02/02 Javascript
微信小程序表单弹窗实例
2018/07/19 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
[04:32]玩具屠夫中文语音节选
2020/08/23 DOTA
python实现哈希表
2014/02/07 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
对python的文件内注释 help注释方法
2018/05/23 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
PyTorch笔记之scatter()函数的使用
2020/02/12 Python
PyCharm 2020 激活到 2100 年的教程
2020/03/25 Python
Keras 使用 Lambda层详解
2020/06/10 Python
Python爬虫小例子——爬取51job发布的工作职位
2020/07/10 Python
Pandas DataFrame求差集的示例代码
2020/12/13 Python
Canvas系列之滤镜效果
2019/02/12 HTML / CSS
澳大利亚二手奢侈品网站:Modsie
2019/09/23 全球购物
逃课打麻将检讨书
2014/10/05 职场文书
乡镇科协工作总结2015
2015/05/19 职场文书
导游词之江西赣州
2019/10/15 职场文书
Python开发之QT解决无边框界面拖动卡屏问题(附带源码)
2021/05/27 Python
python基础之函数的定义和调用
2021/10/24 Python