记一次前端cookie冲突,导致同一个浏览器其他系统被踢下线问题分享

article/2023/6/4 14:56:47

背景:

首先我在是公司的一个职能部门,所做的软件主要是服务于公司内部员工使用,员工可以通过工号来进行登录,也可以通过其他方式登录,所以整个公司提供了一个统一身份管理平台来员工身份认证、权限进行集中式的管理,实现一个账号打通所有应用服务:

 

好处有以下几种吧:

  1. 作为开发人员不需要重新开发登录页面,以及一些身份认证的相关逻辑,节省开发人力
  2. 各个系统登录界面的UI更加一致、统一
  3. 由于登录完成后,一些cookie的设置都是存在主域下面的,这样在同一个浏览器上登录一个系统后,如果系统间的都是该主域的子域名话,cookie之间是可以实现共享,这样当再次打开其他系统时就可以实现免登录的效果

这边就简单讲解一下接入实现逻辑,涉及到后端的接入可能就无法具体讲解了:

1.首先统一身份管理平台在登录成功之后,会跳转到后端一个服务域名上去,目的是将登录人的身份信息通过set cookie方式传给后端(http://xxxx/login?service=后端服务)

2.当后端服务拿到cookie之后会调用统一身份管理平台的认证sdk进行校验,判断该cookie是否在有效期内

3.若在有效期内,则说明认证成功,会跳转到前端域名上,解析html,css,js文件

4.若不在有效期内,说明认证失败,继续重定向到统一身份管理平台进行再次认证

问题描述:

由于我开发的系统是一套中间服务,需要和很多内部系统进行对接,有一天其他系统的产品经理反馈说同一个浏览器上打开两个系统,另外一个系统立马就打不开了并且一直在刷新,非常影响用户体验:

复现:

首先我在我的电脑上复现了全过程,在当我的系统用户信息失效时,再次重新登录时,另外一个系统此时就开始出问题了,这边就简单描述一些问题产生的步骤,中间经历了哪些环节:

1.另外一个系统出问题时,会跳转到统一身份管理平台去重新登录

2.但是那边认为cookie是有效的,又重定向到后端域名上

3.后端服务觉得cookie也是有效的未过期,又重定向到前端域名上来

4.前端域名调用userInfo接口却一直提示401登录信息失效

5.最终导致页面一直在刷新,和产品描述一致

问题思路推理:

那现在问题的根本原因就是一些cookie信息发生了改变,而恰好躲过了统一身份管理平台和后端服务的校验,而这些cookie信息对某些接口却很重要;

因此我开始对比系统正常打开和系统挂了之后两者的cookie:

现象:确实是发生了一些变化,两次ookie信息对比中,某些key被修改了,某些key被删除了;

思考:

然后我就在想是不是在用户信息失效之后,我手动clearCookie导致的,因为这些cookie的key都存在同一个主域下面,当某些key清除或者修改了之后,另外一个系统就不认了;

为了验证,我打开了F12,发现有些cookie是httponly, 有些是完全可以修改的,并且我检查了我的代码,确实是clearCookie的代码逻辑;

当时心里面还经历过一些思想斗争,就觉得在用户信息失效后,前端手动清除cookie也没错啊,如果不清楚有缓存的话也会影响下一次登录;不过话虽如此,最终还是把clearCookie删除并测试了一下,哇塞居然没问题!

总结:

虽然最终解决了问题,但是我觉得后端在cookie的设置上还是不够谨慎,一些重要cookie key信息不设置httponly, 及其容易发生cookie劫持攻击,因为cookie完全是后端设置的,所以也更应该设置成httponly,防止前端修改导致出现的一系列的问题了。

最后如有不足之处,还望在留言区进行补充说明!

http://www.ngui.cc/article/show-1007588.html

相关文章

三、Trino406系列 之 客户端

文章目录前言客户端命令行要求条件客户端安装Running the CLITLS/HTTPSJDBC驱动需求条件安装Registering and configuring the driverConnectingConnection parametersParameter reference前言 https://trino.io/docs/current/client/cli.html 客户端是向trino server提交sql查…

华为OD机试题【字符匹配】用 Java 解 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:字符匹配 题目 给你一个字符串…

Golang流媒体实战之一:体验开源项目lal

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 关于《Golang流媒体实战》 因为工作需要,开始了流媒体开发学习,于是打算选择一个Go版本的开源流媒体服务器作为学习方向lal是个不错的…

OpenWrt开启IPV6设置教程

OpenWrt配置OpenWrt->网络->接口->全局网络选项->清空!WAN 接口配置1.网络->接口->WAN->高级设置2.不勾选 “使用内置的 IPv6 管理”3.“Obtain IPv6-Address”设置为 自动。LAN 接口设置网络->接口->LAN->高级设置不勾选 “使用内置的 IPv6 管理…

TENER: Adapting Transformer Encoder for Named Entity Recognition 笔记

TENER: Adapting Transformer Encoder for Named Entity RecognitionAbstract(摘要)1 Introduction(介绍)2 Related Work(相关工作)2.1 Neural Architecture for NER(NER 的神经网络架构&#x…

【实战】16.Vue Router 入门

简介 vue-router 是 Vue.js 官方提供的路由管理器,用于实现单页应用(Single Page Application, SPA)中的视图切换和页面导航。 vue-router 基于 Vue.js 的组件化思想,将路由信息抽象成组件,可以通过声明式的方式定义路由,将路由与组件映射起来,同时还支持路由导航守卫、…

实验十 图着色问题

《算法设计与分析》实验报告 所在院系 计算机与信息工程学院 学生学号 学生姓名 年级专业 2020级计算机科学与技术 授课教师 彭绪富 学 期 2022-2023学年第一学期 提交时间 2022年11月16日 目录 实验十-1:图着色问题 一、实验目的…

蓝桥杯刷题冲刺 | 倒计时14天

作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.最长递增2.走迷宫3.解立方根4.回文特判5.修改数组1.最长递增 题目 链接: 最长递增…

pip安装及国内源更换

# pip安装 python3: curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py python2: curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip2.py python2 get-pip2.py # pip国内的一些镜像 阿里云 http://mirrors.aliyu…

vue2 和vue3动态绑定src

vue2&#xff1a; webpack 创建的vue2可以通过 require对图片进行动态绑定 <script> export default{data(){return{list:[{id:1,img:require("./assets/logo.png")},{id:2,img:require("./assets/logo.png")},{id:3,img:require("./assets/l…