首页 > 其他分享 >记录--五个有用的iframe踩坑问题,快收藏!

记录--五个有用的iframe踩坑问题,快收藏!

时间:2023-08-01 18:00:58浏览次数:41  
标签:嵌入 iframe -- 收藏 Cookie HTTPS cookie 页面

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

 

你不会还不知道iframe不能嵌入百度首页吧?为了丰富用户体验,我们常常会将其他网站的内容嵌入到自己的网页中。然而,随之而来的是一个常见的问题:Iframe 嵌入网站无法正常使用。你是否也曾遇到过这个困扰,不知道该如何解决呢?文将深入探讨 Iframe 嵌入时可能遇到的若干问题,并为您呈现解决方案。从同源策略、跨域机制到安全性措施,我们将为您解答所有疑问,助您轻松应对 IFrame 嵌入的挑战。让我们一同探索,解锁嵌入网站的可能性,为用户带来更流畅的浏览体验

无法嵌入百度页面 — X-Frame-Options响应限制

 

 

百度使用了 X-Frame-Options 响应头来限制其在 iframe 中的嵌套。X-Frame-Options 是一种安全策略,可以由网站的服务器设置,用于控制页面是否允许在 iframe 中嵌套。当网站设置了 X-Frame-Options 为 DENYSAMEORIGIN,浏览器将不允许将该页面在 iframe 中加载,以防止点击劫持等安全问题。

DENY: 禁止所有页面在 iframe 中嵌套,无论来源域名是什么。

SAMEORIGIN: 允许同源页面在 iframe 中嵌套,但禁止不同源的页面进行嵌套。

allow-from XXX.com: 允许被指定域名的网站嵌套。

cookie设置共享问题

如果目标网站的登录和会话管理依赖于 Cookie,由于跨域限制,Cookie 无法在主域中设置或读取,导致登录状态无法正确保存或共享

这是我用iframe嵌套了一个需要cookie登录的网站

浏览器限制了通过 iframe 中的页面使用 set-cookie 标头来设置 Cookie。这是出于安全考虑,防止跨域 Cookie 污染攻击。当在 iframe 中加载一个来自不同域的页面时,该页面无法通过设置 set-cookie 标头来在主页面的域中设置 Cookie。

这种限制是由同源策略 (Same-Origin Policy) 引起的,它要求网页只能访问来自相同域的资源。Cookie 是一种用于跟踪会话状态和存储用户数据的机制,在跨域的情况下,Cookie 可能被恶意网站滥用,因此浏览器禁止了在跨域 。

set-cookie 标头。

SameSiteoption
Strict 严格禁止第三方 cookie
Lax 仅对 get 请求发送
None Cookie 只能通过 HTTPS 协议发送即必须拥有 Secure 字段

解决方案:

  1. 使用同域代理: 在服务器端设置代理,让服务器请求目标域的资源,然后将结果传递给前端,由前端处理 Cookie。这样可以避免跨域 Cookie 问题。
  2. 使用 token: 通过在请求中使用 token 来进行身份验证和会话管理,而不依赖于 Cookie。比如我直接嵌入掘金的页面,使用情况是属于正常的

  1. CORS: 可以考虑设置目标网站服务器 CORS 响应头,以允许特定域名的请求访问资源。

iframe中跳转问题

首先,在iframe中引入csdn是没有问题的,并且某些内容都能正常访问,可能因为大多数都是get请求的原因,所以访问并没有限制,但是如果进行登录操作,就会出现以下的问题。

这个错误通常出现在浏览器中,涉及到对 iframe 进行跳转的操作。这是由于浏览器的安全机制,阻止当前窗口在 iframe 中导航到其他域名的页面,以防止潜在的安全风险。

这个错误信息表明当前窗口(主页面)试图在 iframe 中导航到 www.csdn.net/

但由于浏览器的安全策略,不允许这样的操作

我去看了下调用的接口,确实是登录的时候会有返回一个需要跳转的地址,这里应该是登录鉴权的地址。

 并且返回的setcookie请求全部抛出异常警告,这也是上面那点cookie中讲到的

 没有了鉴权的这一个步骤,我们可以看到鉴权后的下一个接口的请求,在这个请求登录的接口上,已经没有携带上cookie的信息,自然是无法登录的。

http无法嵌入https

如果页面使用的是 HTTP 协议,而尝试将 HTTPS 页面嵌入到该页面中的 iframe,浏览器会认为它们不是同源的,从而阻止加载 HTTPS 页面。这是为了保护用户的安全和隐私,防止潜在的安全风险,例如通过 HTTP 页面窃取在 HTTPS 页面中输入的敏感信息。

解决方案:

  1. 使用 HTTPS 协议: 主页面也迁移到 HTTPS 协议,这样就不会涉及到 HTTP 和 HTTPS 跨域的问题。
  2. 服务器代理: 在服务器端设置代理,让服务器请求 HTTPS 页面的内容,然后将结果传递给 HTTP 页面的前端,由前端进行展示。
  3. 使用 Subresource Integrity (SRI) : 如果目标 HTTPS 页面提供了 SRI 支持,可以使用 SRI 来加载和验证脚本和样式。

最佳做法是将页面迁移到 使用 HTTPS 协议

本文转载于:

https://juejin.cn/post/7261808673035075643

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

标签:嵌入,iframe,--,收藏,Cookie,HTTPS,cookie,页面
From: https://www.cnblogs.com/smileZAZ/p/17598642.html

相关文章

  • 使用Maven插件为SpringBoot应用构建Docker镜像
    Docker开启远程API用vim编辑器修改docker.service文件#生成证书opensslgenrsa-aes256-outca-key.pem4096opensslreq-new-x509-days365-keyca-key.pem-sha256-outca.pemopensslgenrsa-outserver-key.pem4096opensslreq-subj"/CN=localhost"-sha256-......
  • windows如何上架ios应用到app store
    windows如何上架ios应用到appstoreApplicationUploaderiOSApp上架工具是一款非常好用的针对iOS苹果应用程序软件开发的实用编程工具,它的主要作用是帮助用户进行快速的程序应用设计和程序应用调试,节省用户进行软件开发耗费的不必要时间!​编辑切换为居中......
  • IO模型
    1.同步和异步同步和异步指的是两个函数之间的关系同步:A调用B,A必须得到B返回的结果才能干其它事。异步:A调用B,同时提供给B一个函数,即回调函数,此时A没有得到任何结果继续执行,B在执行完成后,调用A提供的函数告知A。定义:和同步相对,发出异步调用后,调用者在没有得到结果之前,就可以继......
  • javascript按钮通过cookie限制60s后才可以点击
    javascript按钮通过cookie限制60s后才可以点击1️⃣首先创建一个html页面,放入一个按钮 2️⃣设置点击按钮的触发函数一般当点击按钮都会有一些业务需要,在需求结束后,触发saveCookie的方法 3️⃣saveCookie方法当点击查询按钮之后,触发saveCooike方法,按钮倒计时需要一个结束......
  • 运算符重载
    运算符重载:对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型1.加号运算符重载 2.左移运算符重载一般输出时 cout<<p.m_A<<""<<p.m_B<<endl; 但是现在想用<<直接输出p,(直接输出类类型的p, cout<<p<<endl; )该怎么办呢?利用成员函数重载 左移运算符  ......
  • TDengine连接数满了报错:Connection is not available, request timed out after 3000
    背景使用tdengine时遇到一个情况,应用程序使用连接池将接收到的实时数据插入TD时,会出现获取不到连接的报错.重现起一个模拟程序,发送100条数据到应用程序,应用程序从批量插入改为逐条插入td,重现出报错:org.springframework.jdbc.support.MetaDataAccessException:Could......
  • CronExpression 表达式详解
    参数名有效值Seconds(秒)可以用数字0~59表示Minutes(分)可以用数字0~59表示Hours(时)可以用数字0~23表示Day-of-Month(日)可以用数字1~31中的任一个值,但要注意一些特别的月份Month(月)可以用0~11或用字符串JAN,FEB,MAR,APR,MAY,JUN,JU......
  • Docker 发布Jenkins
    更新系统:sudoaptupdatesudoaptupgrade安装必要的依赖:sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-common添加Docker官方的GPG密钥:curl-fsSLhttps://download.docker.com/linux/debian/gpg|sudogpg--dearmor-o/usr/......
  • 7-31打卡
    矩阵快速幂求斐波那契数列快速幂将指数n表示成二进制形式。从二进制的最低位开始遍历,如果当前位为1,则累乘底数x;否则,不进行任何操作。将底数x不断平方,并更新指数n为n的一半。重复步骤2和步骤3,直到遍历完整个二进制表示。publicclassFibonacciMatrix{publicstaticvo......
  • Terraform 部署 Docker
    Terraform部署Docker文件目录结构./├──network#network目录,创建network│├──main.tf│├──outputs.tf│├──terraform.tfstate│├──terraform.tfstate.backup│└──versions.tf└──service......