iframe如何用?常见的一些套路

news2024/12/22 19:16:26

文章目录

    • 🌊什么是iframe
      • 我们来看一个demo
      • iframe的常用属性
      • iframe的优缺点
    • 🌊点击劫持和安全策略
    • 🌊postMessage通信
      • postMessage
    • 🌊iframe如何解决跨域
    • 资源链接

🌊什么是iframe

iframe 标签规定一个内联框架。内联框架就是在一个页面中嵌入另一个页面。

由于 iframe 可能在某些方面不符合标准网页设计的理念,已经被HTMLl5抛弃,目前的HTML5不再支持它了

我们来看一个demo

./code/iframe1.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <iframe src='https://www.juejin.cn' width="100%" height="300px"></iframe>
</body>
</html>

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=.%2Fimg%2Fimage.png&pos_id=img-vCizchFe-169337764

如果我们把链接换成www.baidu.com, 就会受到策略限制
./code/iframe2.html
在这里插入图片描述

iframe的常用属性

  • frameborder
  • width
  • height
  • name
  • src
  • scrolling
  • sandbox 安全限制`
    • alallow-scripts 允许运行脚本
    • allow-downlods 允许下载
    • allow-same-origin 允许同域请求:ajax
    • allow-top-navigation 允许使用顶层上下文的导航: window.top
    • allow-popups 允许从 iframe 中弹出新窗口:window.open
    • allow-forms 允许 form 表单提交

更加详细的属性解释,看下方的MDN链接

iframe的优缺点

优点

  • 使用起来很方便
  • 方便开发,减少代码的重复率
    缺点
  • 部分使用会产生跨域
  • 浏览器后退按钮无效

🌊点击劫持和安全策略

  • CSP(Content Security Policy,即内容安全策略)

    Content Security Policy (CSP) 是一种网络安全策略,用于减少和报告网站上的 XSS (跨站脚本)、数据注入和点击劫持等攻击。
    CSP 通过定义合法的内容来源,限制浏览器加载和执行特定资源的方式。它基于白名单原则,只允许来自特定源的内容加载和执行,阻止任何不在白名单上的资源,从而防止恶意脚本的执行。
    CSP 允许网站管理员制定一系列的策略指令,这些指令告诉浏览器可以执行哪些任务和从哪些地方加载资源。常见的 CSP 指令包括 default-src、script-src、style-src、img-src 等。
    CSP 的优点是可以减少许多客户端的攻击,提高网站的安全性。然而,配置 CSP 需要考虑到网站的需求和资源来源,因此需要进行正确的配置和测试,以确保不影响网站的正常运行。

🌊postMessage通信

我们先来看一个例子(我们可以借助vscode的一个插件Live Server来启动服务)

project1

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1>项目一</h1>
    <iframe src="http://127.0.0.1:5500/docs/repository/temp_lihegui/pro2/index.html" frameborder="0" width="300px"
        height="300px"></iframe>
    <script>
        window.addEventListener('message', (event) => {
            console.log("监听到了");
            console.log('====================================');
            console.log(event.data);
            console.log('====================================');
        })
    </script>
</body>

</html>

project2

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <h1 onclick="publish()">项目二</h1>
    <script>
        function publish() {
            console.log('publish');
            window.parent.postMessage({
                messgae:'传输'
            }, '*')
        }
    </script>
</body>

</html>

💣遇到的坑

如果受同源协议限制,window.parent获取到数据都是空壳原始数据,但是这个方法还是可以用的

postMessage

window.postMessage() 方法允许来自一个文档的脚本可以传递文本消息到另一个文档里的脚本,而不用管是否跨域。一个文档里的脚本还是不能调用在其他文档里方法和读取属性,但他们可以用这种消息传递技术来实现安全的通信。

参数说明

  • message:要发送的消息内容。它可以是任何 JavaScript 可序列化的对象或基本类型。
  • targetOrigin:目标窗口的 URL。只有与目标窗口的 URL 完全匹配时,消息才会被发送。这是为了防止恶意代码发送消息到不受信任的窗口。
  • transfer:一个可选的数组,包含需要传递到目标窗口的 Transferable 对象。Transferable 对象是一些特定类型的对象,如 ArrayBuffer 和 MessagePort,它们可以在窗口间转移所有权,而不是进行复制操作。这可以提高性能,尤其是对于大型数据。

应用场景

  • 页面和其打开的新窗口的数据传递
  • 页面与嵌套的 iframe 消息传递
  • 多窗口之间消息传递

🌊iframe如何解决跨域

在嵌入的网页和包含 iframe 的页面之间存在一个同源策略。即使 iframe 的协议与页面的协议相同,如果它们的域名、端口号或协议之一不匹配,那么 iframe 将被认为不是同源,访问其中的内容将受到限制。

大多数解决办法都是更改协议,这种当方式往往不现实,一般需求可以通过

  • URL传递参数✔️
  • postMessage来进行通信✔️

这两种方式还是可以的

跨域在这里就不多说了

资源链接

一个容易被忽视的标签 —— iframe
postMessage - 跨域消息传递
[MDN文档]https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云轻量应用服务器Linux-Centos7下Oracle19c的配置

初始环境&#xff1a;阿里云轻量应用服务器已经安装Oracle19c 具体目标&#xff1a;配置Oracle Database 19c 目录 第一步&#xff1a;切换到Oracle命令行第二步&#xff1a;新建用户和表空间第三步&#xff1a;切换用户第四步&#xff1a;在当前用户下创建一些表第五步&#x…

自动驾驶和辅助驾驶系统的概念性架构(一)

摘要&#xff1a; 本文主要介绍包括功能模块图&#xff0c;涵盖了底层计算单元、示例工作负载和行业标准。 前言 本文档参考自动驾驶计算联盟(Autonomous Vehicle Computing Consortium)关于自动驾驶和辅助驾驶计算系统的概念系统架构。 该架构旨在与SAE L1-L5级别的自动驾驶保…

[Pandas] pandas.melt

melt是溶解 / 分解的意思&#xff0c;即拆分数据 melt()函数可以将一些列的内容进行合并&#xff0c;把宽表整合成长表 语法格式 pandas.melt(frame, id_varsNone, value_varsNone, var_nameNone, value_namevalue)参数说明 frame&#xff1a;要处理的数据集 id_vars&#…

超时取消订单

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

BlockUI专栏目录

文章作者&#xff1a;里海 来源网站&#xff1a;王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C-CSDN博客 简介&#xff1a; BlockUI是一个设计NX对话框的工具&#xff0c;是官方推荐使用的对话框制作方法&#xff0c;能够与NX自身风格相统一&#xff0c;并且在实际…

el-checkbox 多选搜索查询,搜索后选中状态仍保留

<template><div><div class"half-transfer"><div class"el-transfer-panel"><div><el-checkbox v-model"selectAll" change"handleSelectAll">全部</el-checkbox></div><el-input…

java入坑之泛型

一、泛型入门 1.1基础概念 Java泛型是JDK 5中引入的一个新特性&#xff0c;它提供了编译时类型安全检测机制&#xff0c;该机制允许程序员在编译时检测到非法的类型 泛型的本质是参数化类型&#xff0c;也就是说所操作的数据类型被指定为一个参数。这意味着你可以使用一套代码…

【Jetpack】Navigation 导航组件 ⑤ ( NavigationUI 类使用 )

文章目录 一、NavigationUI 类简介二、NavigationUI 类使用流程1、创建 Fragment2、创建 NavigationGraph3、Activity 导入 NavHostFragment4、创建菜单5、Activity 界面开发 NavigationUI 的主要逻辑 ( 重点 )a、添加 Fragment 布局b、处理 Navigation 导航逻辑 ( 重点 )c、启…

__call__函数

一、定义 在Python中&#xff0c;__call__函数是一个特殊的方法&#xff0c;用于使一个对象可以像函数一样被调用。当一个对象定义了__call__方法时&#xff0c;它就成为了一个可调用对象。 二、使用 class Counter:def __init__(self):self.count 0def __call__(self):sel…

查漏补缺 - 构造函数,原型,this,原型链,继承

目录 1&#xff0c;构造函数2&#xff0c;原型3&#xff0c;this4&#xff0c;原型链1&#xff0c;特点2&#xff0c;Object.prototype.toString()3&#xff0c;instanceof 运算符4&#xff0c;Object.getPrototypeOf()5&#xff0c;创建空原型对象6&#xff0c;面试题 5&#…

异步迭代器

一、什么是异步迭代器&#xff1f; 实现了 __aiter__() 和 __anext__() 方法的对象。__anext__ 必须返回一个 awaitable对象。async for 会处理异步迭代器的 __anext__() 方法所返回的可等待对象&#xff0c;直到其引发一个 StopAsyncIteration 异常。 二、实例 class Async…

Python - functools.partial设置回调函数处理异步任务基本使用

一. 前言 在Python中&#xff0c;回调函数是指在一个函数执行完成后&#xff0c;调用另一个函数的过程。通常情况下&#xff0c;回调函数作为参数传递给原始函数&#xff0c;原始函数在执行完自己的逻辑后&#xff0c;会自动调用回调函数并将结果作为参数传递给它。 二. 回调…

知了汇智承办网信人才培训活动第二期,助力数字化网安人才储备

在数字经济时代&#xff0c;随着信息化的快速发展和互联网的深度应用&#xff0c;网络信息安全问题日益突出&#xff0c;成为制约数字经济健康发展的重要因素。为了有效提升网络安全人才的专业素质和技术能力&#xff0c;保障国家信息安全。知了汇智作为数字产教融合基地&#…

学习JAVA打卡第四十七天

日期的格式化 程序可能希望按照某种习惯来输出时间。例如时间的顺序&#xff1a;年/月/日或年/月/日/时/分/秒。可以直接使用String类调用format方法对日期进行格式化。 Format方法 Format方法&#xff1a; format&#xff08;格式化模式,日期列表&#xff09; 按照“格式…

FFT代码上的实现细节

ω \omega ω 的计算 ω n 1 \omega_n^1 ωn1​ 的计算 考虑单位圆&#xff0c; ω n 1 \omega_n^1 ωn1​ 为&#xff1a; 也就是&#xff1a; 注&#xff1a;op为判断当前为dft还是idft ω n i \omega_n^i ωni​ 的计算 当要计算 ω n i \omega_n^i ωni​ 时&#xf…

NSS [NUSTCTF 2022 新生赛]Ezjava1

NSS [NUSTCTF 2022 新生赛]Ezjava1 题目描述&#xff1a;你能获取flag{1}吗 开题&#xff0c;一眼java web中的index.jsp。 默认index.jsp中的body内容是$END$ 附件jar包导入IDEA&#xff0c;会自动反编译。看看源码。 附件结构大致如此。主要看classes.com.joe1sn中的代码就…

一篇掌握高级交换技术原理与配置(三):QINQ

一、概述 随着以太网技术在网络中的大量部署&#xff0c;利用VLAN对用户进行隔离和标识受到很大限制。因为IEEE802.1Q中定义的VLAN Tag域只有12个比特&#xff0c;仅能表示4096个VLAN&#xff0c;无法满足城域以太网中标识大量用户的需求&#xff0c;于是QinQ技术应运而生。 …

远程管理通道安全SSH协议主机验证过程

可以使用SSH协议进行远程管理通道安全保护&#xff0c;其中涉及的主要安全功能包括主机验证、数据加密性和数据完整性保护。 这里要注意的是【主机验证】和【身份验证】的区别&#xff0c;主机验证是客户端确认所访问的服务端是目标访问对象&#xff0c;比如从从客户端A(192.16…

企业微信cgi-bin/gateway/agentinfo接口存在未授权访问漏洞 附POC

文章目录 企业微信cgi-bin/gateway/agentinfo接口存在未授权访问漏洞 附POC1. 企业微信cgi-bin/gateway/agentinfo接口简介2.漏洞描述3.影响版本4.fofa查询语句5.漏洞复现6.POC&EXP7.整改意见8.往期回顾 企业微信cgi-bin/gateway/agentinfo接口存在未授权访问漏洞 附POC 免…

8天长假快来了,Python分析【去哪儿旅游攻略】数据,制作可视化图表

目录 前言环境使用模块使用数据来源分析 代码实现导入模块请求数据解析保存 数据可视化导入模块、数据年份分布情况月份分布情况出行时间情况费用分布情况人员分布情况 前言 2023年的中秋节和国庆节即将来临&#xff0c;好消息是&#xff0c;它们将连休8天&#xff01;这个长假…