浅谈Cookie跨域获取

《浅谈Cookie跨域获取》首发牧马人博客转发请加此提示

浅谈Cookie跨域获取

背景

最近在接入一个第三方的单点登录平台,使用的Oauth2对接的,本来是没啥问题,奈何退出环节他是使用Cookie进行退出的,这时就涉及到了一个跨域问题。看下图

在这里插入图片描述

由此引出本文主要讨论到的一个问题,两个域名完全不一样的的系统,甲方能拿到乙方的cookie嘛?

何为同源策略?

同源策略是一个重要的安全策略,它用于限制一个源的文档或者它加载的脚本如何能与另一个源的资源进行交互。

它能帮助阻隔恶意文档,减少可能被攻击的媒介。例如,它可以防止互联网上的恶意网站在浏览器中运行 JS 脚本,从第三方网络邮件服务(用户已登录)或公司内网(因没有公共 IP 地址而受到保护,不会被攻击者直接访问)读取数据,并将这些数据转发给攻击者。

源的定义

如果两个 URL 的协议、端口(如果有指定的话)和主机都相同的话,则这两个 URL 是同源的。这个方案也被称为“协议/主机/端口元组”,或者直接是“元组”。(“元组”是指一组项目构成的整体,具有双重/三重/四重/五重等通用形式。)

下表给出了与 URL http://store.company.com/dir/page.html 的源进行对比的示例:

URL结果原因
http://store.company.com/dir2/other.html同源只有路径不同
http://store.company.com/dir/inner/another.html同源只有路径不同
https://store.company.com/secure.html失败协议不同
http://store.company.com:81/dir/etc.html失败端口不同(http:// 默认端口是 80)
http://news.company.com/dir/other.html失败主机不同
跨域读取cookie

基于同源策略的定义,A.com跟B.com是不同源的,理论上来说A.com是无法获取到B.com的Cookie的。那么是否有方法能够让B.com的cookie被A.com读取到呢?

cookie是存储在客户端上的,如果没有同源的限制,那么cookie是可以被随意获取到的。下面我简单介绍一下cookie在浏览器中的一些参数设置。以google浏览器为例子。打开F12

在这里插入图片描述

名字意义
namecookies的名字,也是cookies的唯一标识
value也就是cookies的内容,这是cookies有用的内容
Domaincookies所属的域
Pathcookies所属的路径,他是属于某个路径的,/代表根路径
expirescookies的到期时间,如果为0则永不过期
http如果打钩则通过脚本无法获取,可以防止xss攻击
securehttps连接才会传送该cookies,增强了安全性
sameSite可选值Strict 和 Lax,None,Strict 严格模式,不能被第三方网站获取,Lax:宽松模式,可以被第三方获取,None是最为宽松的一种设定,通常用于开放我们的服务给不同的第三方接入,同时又需要追踪用户的场景,比如广告,设置为 None 时需要考虑开放的安全性。

看到这里其实我的问题已经有了答案,大家也明白了关键点就是cookie的一些属性设置特别是sameSite这个属性了,也就是说把sameSite设置为None的话。第三方跨域请求我的退出地址就会携带上我的cookie。

前端跨域的请求方式
  1. 原生js
 var script = document.createElement('script');script.type = 'text/javascript';script.src = 'http://www.B.com:8080/loginOut?t=123&callback=handleCallback';document.head.appendChild(script);// 回调执行函数function handleCallback(res) {alert(JSON.stringify(res));}
  1. jquery Ajax实现
 $.ajax({url: 'http://www.B.com:8080/loginOut',type: 'get',dataType: 'jsonp',  // 请求方式为jsonpjsonpCallback: "handleCallback",  // 自定义回调函数名data: {}
});
  1. Vue axios实现
this.$http = axios;
this.$http.jsonp('http://www.B.com:8080/loginOut', {params: {},jsonp: 'handleCallback'
}).then((res) => {console.log(res); 
})

这里提醒一下后端提供的接口必须为get请求才可以。

关于统一平台为何使Cookie用来退出?

这里其实我问过统一平台的开发,我问他作为统一平台为何退出的时候需要去获取别的平台作为Cookie,为何不使用Uid的方式,或者别的方式。

统一平台:我不清楚第三方系统的系统唯一标识是否统一是uid。有些可能是手机号有些可能是用户名。所以唯一标识采用第三方自己定义的cookie来确定。

我听完后直接回了一句:好有道理!!!(心里想不就是懒嘛!提供一个随机code,然后我再用随机码去调用认证中心获取用户信息(uid,uname)等,这样不一样可以解决这个问题嘛。)

目前用cookie的方式有个很烦的弊端:

  1. 接入方必须提供https 。

  2. 第三方应用登录后需要维护一个唯一的cookie。不管你系统是不是用cookie为登录标识,你都需要维护一个。

总结

在某些特定情况下不同源的网站之间Cookie是可以进行传递的。我看了很多文章都只写了如何实现跨域请求,但是没有一个人能说清不同源的网站之间Cookie是否可以进行传递。有很多人给的方案都是告诉我如何做单点,比如说建议我注册一个子域名的,比如说告诉我cookie不行,要使用token去做单点。但是感觉问了一圈感觉没有人理解我这个问题。希望我这篇文章能给大家一点帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/438385.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mysql查询数据

1 基本查询语句 MySQL从数据表中查询数据的基本语句为SELECT语句。SELECT语句的基本格式是: 2 单表查询 2.1 查询所有字段 SELECT * FROM 表名; 2.2 在SELECT语句中指定所有字段 SELECT f_id, s_id ,f_name, f_price FROM fruits; 2.3 查询单个字段 SELECT 列名FR…

RabbitMQ-如何保证消息不丢失

RabbitMQ常用于 异步发送,mysql,redis,es之间的数据同步 ,分布式事务,削峰填谷等..... 在微服务中,rabbitmq是我们经常用到的消息中间件。它能够异步的在各个业务之中进行消息的接受和发送,那么…

Python根据Excel表进行文件重命名

一、问题背景 在日常办公过程中,批量重命名是经常使用的操作。之前我们已经进行了初步探索,主要是通过批处理文件、renamer软件或者Python中的pathlib等模块对当前目录下的文件进行批量重命名。 而今天我们要使用的是PythonExcel的方法对指定目录下的文…

Thymeleaf基础教程

系列文章目录 文章目录 系列文章目录一、Thymeleaf 语法规则二、Thymeleaf 语法分为以下 2 类标准表达式语法th 属性2.1 基础语法2.1.1 变量表达式 ${}2.1.2 选择变量表达式 *{}2.1.3 链接表达式 {} 2.1.4 消息表达式 三、常用的 th 标签四、迭代循环 一、Thymeleaf 语法规则 …

C++类和对象引入以及类的介绍使用

文章目录 一、面向过程和面向对象的初步认识二、类的引入2.2 类的引入 三、类的访问限定符及封装3.3 访问限定符3.4 【面试题】C中struct和class的区别3.5 类的两种定义方式 四、封装【面试题】面向对象的三大特性 五、类的作用域六、类的实例化七、类对象模型7.1 类对象的存储…

网络通信实现

【 一 】网络通信实现 【 1 】实现网络通信的四要素 本机的ip地址 子网掩码 网关的IP地址 DNS的IP地址( 域名系统) DNS服务器是指提供域名解析服务的服务器。它负责将域名转换为相应的IP地址,以便计算机可以通过IP地址与其他设备进行通信。 通过使用DNS服务器…

ESP8266采用AT指令连接华为云服务器方法(MQTT固件)

一、前言 本篇文章主要介绍3个内容: (1)ESP8266-WIFI模块常用的AI指令功能介绍 (2)ESP8266烧写MQTT固件连接华为云IOT服务器。 (3)介绍华为云IOT服务器的配置过程。 ESP8266是一款功能强大…

LVGL部件

一.标签部件 1.如何创建标签部件以及设置文本 ![2024-01-28T09:54:08.png][3] void my_lvgl(void) {lv_obj_t *lablelv_label_create(lv_scr_act()); //创建一个标签lv_label_set_text(lable,"hello"); //普通更改文字lv_label_set_text_fmt(lab…

统计学-认识数据

数据 如: 定性数据: 性别:男、女 颜色:红、绿、青、蓝、紫 教育程度:高中、本科、硕士、博士 评价:好评、中评、差评 定量数据: 年份:2019、2018、2017、2016 温度:10、…

专业133总分400+上海交通大学819考研经验分享上交819电子信息与通信工程

今年专业819信号系统与信号处理133,总分400,如愿考上梦中上海交通大学,通过自己将近一年的复习,实现了人生中目前为止最大的逆袭(自己本科学校很普通),总结自己的复习经历,希望可以给…

C++ 数论相关题目 扩展欧几里得算法(裴蜀定理)

给定 n 对正整数 ai,bi ,对于每对数,求出一组 xi,yi ,使其满足 aixibiyigcd(ai,bi) 。 输入格式 第一行包含整数 n 。 接下来 n 行,每行包含两个整数 ai,bi 。 输出格式 输出共 n 行,对于每组 ai,bi ,求…

多只动物3D姿态估计与行为识别系统

动物社会行为的量化是动物科学研究的重要步骤。虽然现有的深度学习方法已经实现了对常见动物的精确姿态估计、识别和行为分类,但由于缺乏注释良好的数据集,其应用依然受到挑战。因此该研究展示了一个计算框架,即社会行为图谱(SBeA…