热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iframe页面总是提示需要重新登录怎么办

由于历史原因,公司内部系统有一些页面是基于iframe嵌入的其他系统的页面,之前一直运行正常,最近不知什么原因接连出现访问所有iframe页面时提示需要登录的情况,并且点击ifra

iframe页面总是提示需要重新登录怎么办

由于历史原因,公司内部系统有一些页面是基于iframe嵌入的其他系统的页面,之前一直运行正常,最近不知什么原因接连出现访问所有iframe页面时提示需要登录的情况,并且点击iframe页面的登录按钮时会出现页面闪一下,没有任何跳转的现象。

原文链接:iframe页面二次登录问题

生产问题

问题背景

由于历史原因,公司内部系统有一些页面是基于iframe嵌入的其他系统的页面,之前一直运行正常,最近不知什么原因接连出现访问所有iframe页面时提示需要登录的情况,并且点击iframe页面的登录按钮时会出现页面闪一下,没有任何跳转的现象。

image

问题显而易见,怎么解决呢?透过现象看本质,旁边业务还在催问什么时候能恢复,只能硬着头皮一步步分析着看。

首先,这些系统都接入了公司内部的sso服务,主体系统A已经成功登录的情况下,内嵌系统B还需要二次登录,肯定是相关鉴权未通过。

而整个鉴权信息都是基于COOKIE机制来完成的,所以借此机会先回顾一下COOKIE相关知识。

原因定位

跟踪网络请求发现,当请求内嵌页面时,首先会发起SSO认证请求https://sso.xxx.com/authentication/login?sevice=http://b.xxx.com,这个请求的scheme是HTTPS,而主系统A没有升级HTTPS, 所以B系统发起SSO认证时属于cross-site情形,无法携带此前生成的用户身份COOKIE信息,用户鉴权失败。

image

image

当点击内嵌页面中的登录按钮时,由于此时发起的请求仍然是cross-site的,所以COOKIE始终无法写入,就会出现页面闪一下,但并未登录的情况。

image


HTTP COOKIE是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器发起请求时被携带并发送到服务器上。

COOKIE主要用于以下三个方面:

  • 会话状态管理,如用户登录状态、购物车、游戏分数等。
  • 个性化设置,如用户自定义设置,主题等。
  • 浏览器行为跟踪,如跟踪分析用户行为等。

第三方COOKIE

COOKIE与域关联。如果此域与您所在页面的域相同,则该COOKIE称为第一方COOKIE(first-party COOKIE)。如果域不同,则它是第三方COOKIE(thirty-patry COOKIE)。第三方COOKIE是由第三方网站引导发出的,可以用于CSRF攻击以及用户行为追踪。

限制访问COOKIE

通过以下方式可以确保COOKIE被安全发送,不会被意外的参与者或脚本访问:

  • Secure属性:标记为Secure的COOKIE只能通过被HTTPS协议加密过的请求发送给服务端,可以借此来预防中间人攻击

    从 Chrome 52 和 Firefox 52 开始,不安全的站点(http:)无法使用COOKIE的 Secure 标记。

  • HttpOnly属性:Javascript的Document.COOKIEAPI无法访问带有HttpOnly属性的COOKIE,此类COOKIE仅作用于服务器。例如,持久化服务器会话的COOKIE不需要对Javascript可用,因此可以设置HttpOnly属性。可以借此来缓解XSS攻击。

Set-COOKIE: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

COOKIE作用域

通过DomainPath标识来定义COOKIE的作用域:即允许COOKIE应该发送给哪些URL。

Domain属性

指定哪些主机可以接受COOKIE。默认为origin,不包含子域名。如果指定了Domain,则一般包含子域名。

当前大多数浏览器遵循 RFC 6265,设置 Domain 时 不需要加前导点。浏览器不遵循该规范,则需要加前导点,例如:Domain=.mozilla.org

Path属性

指定主机下哪些路径可以接受COOKIE(该URL路径必须存在于请求URL中)。以字符%X2F("/")作为路径分隔符,子路径也会被匹配。

例如,设置Path=/docs,以下地址都会匹配:

  • /docs
  • /docs/web/
  • /docs/web/HTTP

SameSite属性

SameSite属性允许服务器要求某个COOKIE在跨站请求时不会被发送,从而可以阻止跨站请求伪造攻击(CSRF)。

Set-COOKIE: key=value; SameSite=Strict

SameSite取值有以下三种:

  • None:浏览器会在同站请求、跨站请求下继续发送COOKIE,不区分大小写。

    大多数网站已经将SameSite的默认值设置为Lax,此时如果网站想要关闭SameSite属性,必须在将SameSite属性设置为None的同时设置Secure属性,否则无效。

// 该设置无效
Set-COOKIE: widget_session=abc123; SameSite=None

// 有效设置
Set-COOKIE: widget_session=abc123; SameSite=None; Secure
  • Strict浏览器只在访问相同站点时发送COOKIE。
  • Lax:与Strict类似,但用户从外部站点导航至目标网址的Get请求除外(链接、预加载请求以及GET表单)。
请求类型 示例 正常情况 Lax
链接 发送 COOKIE 发送 COOKIE
预加载 发送 COOKIE 发送 COOKIE
GET 表单 发送 COOKIE 发送 COOKIE
POST 表单 发送 COOKIE 不发送
iframe 发送 COOKIE 不发送
AJAX $.get("...") 发送 COOKIE 不发送
Image 发送 COOKIE 不发送

same-origin和same-site

同源(same-origin)、同站点(same-site)是两个随处可见的概念,但是这两个概念经常容易被混淆。

Origin

首先来看一下origin的定义是什么。scheme + hostname + port构成的整体叫做origin,例如https://www.example.com/443/foo的origin是https://www.example.com/443

image

具有相同的scheme、hostname以及port的站点被视为同源站点,否则视为跨域(cross-origin)站点.

Site

学习site之前,先来了解一下什么是TLD、eTLD。

TLD

TLD全称叫做顶级域名(Top-Level-Domain),比如我们经常看到的com、cn、io之类的,都属于顶级域名。

TLD有一个记录列表,这个列表叫做Root Zone Database,里面记录了所有的顶级域名。需要注意的是,顶级域名不一定都是单词很短且只有一级的域名。

image

如上图,TLD和它之前部分的域构成的整体叫做"site",比如https://www.example.com:443/foo ,"site" 是example.com

eTLD

除了顶级域名之外,还有一种叫做eTLD(effective Top-Level-Domain)的东西,它表示的是有效顶级域名。

例如.io是一个TLD,而像.github.io,是一个开放给用户的用于搭建个人网站的一个域。比如现在有以下三个网站:

http://zhangsan.github.io
http://lisi.github.io
http://wangwu.github.io

我们判断是否是同一个站点,通常是采用顶级域名+二级域名来判断,这里如果直接用.io这个TLD来识别,就会认为这三个网站是同一个站点,COOKIE可以共享。

显然这是有问题的,因此需要引入eTLD的概念,将.iogithub合起来的.github.io注册为一个"effective TLDs"。将eTLD+1整体视为网站的站点名称,这样一来,上述三个网址表示的就是不同的网站,COOKIE就会相互隔离。

image

eTLD信息在Public Suffix List列表中定义,可以通过publicsuffix.org/list查询域名是否为有效顶级域名。

schemeful same-site

关于"same-site的定义一直在不断演变,由此出现将URL Scheme看作是site的一部分的这种策略。基于这种策略可以避免网站遭受基于HTTP协议的一些攻击。

在schemeful same-site规则下,由于scheme不同,http://www.example.comhttps://www.example.com 被认为是不同的站点。

如何判断

Chrome浏览器发送请求时会携带名为Sec-Fetch-Site的Header信息,根据该Header的取值可以判断当前请求是否同源、是否跨站(schemeful-same-site未被记录在Sec-Fetch-Site中)。

image

Sec-Fetch-Site取值如下:

  • cross-site
  • same-site
  • same-origin
  • none

本文来自云海天,作者:高高木,转载请注明原文链接:https://www.cnblogs.com/gaogaomu/p/15783008.html


推荐阅读
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • DVWA学习笔记系列:深入理解CSRF攻击机制
    DVWA学习笔记系列:深入理解CSRF攻击机制 ... [详细]
  • 在使用USB接口的二维条码扫描器时,发现其无法正确识别条码中的中文字符。然而,采用串口连接的方式则能够成功识别。目前面临的问题是如何将通过串口获取的数据在网页中进行实时展示,希望各位专家能提供解决方案,不胜感激。 ... [详细]
  • 本文深入探讨了Ajax的工作机制及其在现代Web开发中的应用。Ajax作为一种异步通信技术,改变了传统的客户端与服务器直接交互的模式。通过引入Ajax,客户端与服务器之间的通信变得更加高效和灵活。文章详细分析了Ajax的核心原理,包括XMLHttpRequest对象的使用、数据传输格式(如JSON和XML)以及事件处理机制。此外,还介绍了Ajax在提升用户体验、实现动态页面更新等方面的具体应用,并讨论了其在当前Web开发中的重要性和未来发展趋势。 ... [详细]
  • 利用 Python 实现 Facebook 账号登录功能 ... [详细]
  • HTML5 Web存储技术是许多开发者青睐本地应用程序的重要原因之一,因为它能够实现在客户端本地存储数据。HTML5通过引入Web Storage API,使得Web应用程序能够在浏览器中高效地存储数据,从而提升了应用的性能和用户体验。相较于传统的Cookie机制,Web Storage不仅提供了更大的存储容量,还简化了数据管理和访问的方式。本文将从基础概念、关键技术到实际应用,全面解析HTML5 Web存储技术,帮助读者深入了解其工作原理和应用场景。 ... [详细]
  • python flask面试题_Python面试的50个经典问答,助你从容通过面试(下)
    26)Python中的局部变量和全局变量的使用规则是什么?局部变量:仅可在某个对象或函数内部使用,无法被其他对象或函数所引 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 在优化Nginx与PHP的高效配置过程中,许多教程提供的配置方法存在诸多问题或不良实践。本文将深入探讨这些常见错误,并详细介绍如何正确配置Nginx和PHP,以实现更高的性能和稳定性。我们将从Nginx配置文件的基本指令入手,逐步解析每个关键参数的最优设置,帮助读者理解其背后的原理和实际应用效果。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
  • 在本篇教程中,我们将详细介绍如何通过 GitHub Pages 和 Hexo 对博客首页进行优化,并实现文章互动功能。具体包括如何集成百度统计,注册并登录百度统计网站(https://tongji.baidu.com/web/welcome/login),获取统计代码并将其嵌入到博客中,以便实时监控访问数据和用户行为。此外,我们还将探讨如何添加评论系统,提升读者参与度和互动体验。 ... [详细]
  • 本课程详细介绍了如何使用Python Flask框架从零开始构建鱼书应用,涵盖高级编程技巧和实战项目。通过视频教学,学员将学习到Flask的高效用法,包括数据库事务处理和书籍交易模型的实现。特别感谢AI资源网提供的课程下载支持。 ... [详细]
  • 中间件的概念中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有