iframe 嵌入页面?才不是那么轻轻松松!

简介: iframe 嵌入页面?才不是那么轻轻松松!

背景介绍


故事是这样的,前一阵接到一个任务,一个看似很平常的任务,我和一个实习生同学开开心心的完成并等待联调。


可是事与愿违,服务端同学和对接方没有谈拢,他们就想到一个鬼点子,用 iframe 嵌入他们的页面,以实现我们的需求。可是在调研的过程中我发现了以下问题:


  • 部分页面无法嵌入
  • 无法通过设置 cookie 绕过该系统的登陆


可能这个问题在各位前辈面前就是常见问题,但是我也去查询了问题出现的原因。于是,就有了这篇文章。


踩坑纪实


X-Frame-Options


部分页面无法嵌入的原因

参考:developer.mozilla.org/zh-CN/docs/…


The X-Frame-OptionsHTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, <iframe>, <embed> 或者 <object> 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 clickjacking 攻击。


X-Frame-Options 有三个可能的值:


X-Frame-Options: deny
X-Frame-Options: sameorigin
X-Frame-Options: allow-from https://example.com/


deny

  • 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

sameorigin

  • 表示该页面可以在相同域名页面的 frame 中展示。

allow-from uri

  • 表示该页面可以在指定来源的 frame 中展示。

配置方法

  • Apache
  • nginx
  • IIS
  • HAProxy
  • Express

具体方法请参考上方 mdn 链接


SameSite cookies


无法通过设置 cookie 绕过该系统的登陆的原因


参考:developer.mozilla.org/zh-CN/docs/…


SameSite 是HTTP响应头 Set-Cookie 的属性之一。它允许您声明该Cookie是否仅限于第一方或者同一站点上下文。

SameSite 接受下面三个值:

Lax

  • Cookies允许与顶级导航一起发送,并将与第三方网站发起的GET请求一起发送。这是浏览器中的默认值。

Strict

  • Cookies只会在第一方上下文中发送,不会与第三方网站发起的请求一起发送。

None

  • Cookie将在所有上下文中发送,即允许跨域发送。


以前 None 是默认值,但最近的浏览器版本将 Lax 作为默认值,以便对某些类型的跨站请求伪造 (CSRF) 攻击具有相当强的防御能力。

使用 None 时,需在最新的浏览器版本中使用 Secure 属性。

Chrome76版本更新拒绝不安全的 samesite=none 的 cookie


结束语


网络异常,图片无法展示
|


工作中遇到问题在所难免,也请各位做好总结,这样才能进步~


✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

弓背霞明剑照霜,秋风走马出咸阳。
未收天子河湟地,不拟回头望故乡。

✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨

相关文章
|
应用服务中间件 nginx
iframe嵌套其他网站提示连接被拒绝
iframe嵌套其他网站提示连接被拒绝
2124 0
|
SQL 数据可视化 Linux
ClickHouse【环境搭建 03】Linux环境离线安装 clickhouse-22.3.3.44 配置参数说明+可视化界面使用(离线安装文件分享百度云盘)
ClickHouse【环境搭建 03】Linux环境离线安装 clickhouse-22.3.3.44 配置参数说明+可视化界面使用(离线安装文件分享百度云盘)
1240 0
|
24天前
|
人工智能 运维 Cloud Native
一起聊聊大规模 AI Agent 部署与运维实战
诚挚地邀请您参加将于 11 月 28 日(周五)下午,在北京阿里中心举办的 【企业 AI 原生应用架构升级】主题研讨会。
|
JavaScript 前端开发 安全
深入理解 JDK 1.8 新特性
深入理解 JDK 1.8 新特性
379 2
|
11月前
|
数据采集 存储 JavaScript
jsdom爬虫程序中eBay主页内容爬取的异步处理
jsdom爬虫程序中eBay主页内容爬取的异步处理
|
人工智能
最近很火的人工智能ChatGPT可以实现“ 连续对话”机制
这篇文章介绍了人工智能ChatGPT实现连续对话机制的方法,包括如何通过传递特定的参数如conversation_id来保持对话的连续性。
最近很火的人工智能ChatGPT可以实现“ 连续对话”机制
|
数据采集 存储 JSON
基于qwen2.5开源大模型 处理 环境、社会及治理 相关资料
基于Qwen-2.5开源大模型,本方案旨在处理环境、社会及治理(ESG)相关资料,涵盖数据分析、决策辅助和报告生成等任务。方案详细描述了从数据准备、模型功能设计到部署优化的全过程,并列举了多种应用场景,如企业合规审查、投资评估支持等,旨在为企业、机构和研究者提供全面的ESG资料处理解决方案。
566 0
|
Linux 网络安全 开发工具
Linux 管理远程会话 screen:掌握终端的多任务操作
`Linux screen` 命令让多任务管理变得更简单,尤其在SSH连接远程服务器时。创建新会话如`screen -S backup`,查看会话`screen -ls`,退出`exit`。高级功能包括直接在会话中运行命令,如`screen vim memo.txt`,会话共享以协同工作,以及通过`screen -r`或`-D -r`重新连接或强制恢复断开的会话。提高效率,确保任务不间断运行。
358 1
|
XML 前端开发 JavaScript
深入探究iframe:网页嵌入的魔法盒子(下)
深入探究iframe:网页嵌入的魔法盒子(下)
|
前端开发 JavaScript 中间件
Vue 2.x折腾记 - (12) Nuxt.js写一个校验访问浏览器设备类型及环境的中间件
这个需求非常常见,分享出去的页面的有时候在手机访问,有时候别人是PC打开的; 若是不是共享同一个页面的情况,就需要拦截跳转了; 当然你要共享同一个页面也可以(放大化到PC也需要添加某些CSS,也需判断设备)
602 83