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程序员开发中常犯的10个错误
Jul 07 Python
Python使用getpass库读取密码的示例
Oct 10 Python
python多进程实现进程间通信实例
Nov 24 Python
利用 python 对目录下的文件进行过滤删除
Dec 27 Python
Python装饰器简单用法实例小结
Dec 03 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
Pyqt5实现英文学习词典
Jun 24 Python
django 邮件发送模块smtp使用详解
Jul 22 Python
python3反转字符串的3种方法(小结)
Nov 07 Python
Pycharm调试程序技巧小结
Aug 08 Python
详解python with 上下文管理器
Sep 02 Python
使用Python开发冰球小游戏
Apr 30 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+MYSQL会员系统的开发实例教程
2014/08/23 PHP
PHP magento后台无法登录问题解决方法
2016/11/24 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
通过身份证号得到出生日期和性别的js代码
2009/11/23 Javascript
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
jquery mobile changepage的三种传参方法介绍
2013/09/13 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
jQuery模仿单选按钮选中效果
2016/06/24 Javascript
jQuery post数据至ashx实例详解
2016/11/18 Javascript
jQuery实现用户输入自动完成功能
2017/02/13 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
基于Cookie常用操作以及属性介绍
2017/09/07 Javascript
bootstrap时间插件daterangepicker使用详解
2017/10/19 Javascript
关于echarts在节点显示动态数据及添加提示文本所遇到的问题
2018/04/20 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
微信小程序实现获取小程序码和二维码java接口开发
2019/03/29 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
vue实现微信分享链接添加动态参数的方法
2019/04/29 Javascript
js实现聊天对话框
2020/02/08 Javascript
实例讲解React 组件生命周期
2020/07/08 Javascript
js闭包的9个使用场景
2020/12/29 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
[01:13:46]iG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python的requests网络编程包使用教程
2016/07/11 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
python使用udp实现聊天器功能
2018/12/10 Python
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
心得体会开头
2014/01/01 职场文书
公司营业员的自我评价
2014/03/04 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
2014法院干警廉洁警示教育思想汇报
2014/09/13 职场文书
婚前协议书范本
2014/10/27 职场文书
小学工作总结2015
2015/05/04 职场文书
Windows Server 2008配置防火墙策略详解
2022/06/28 Servers