全局作用域在iframe跨域通信中无法直接共享,这是浏览器同源策略的硬性限制;安全隔离的核心是切断直接访问路径,仅保留经严格origin校验和结构化数据校验的postMessage可控消息通道,并辅以sandbox权限收紧和服务端临时票据鉴权兜底。

全局作用域在 iframe 跨域通信中无法直接共享,这是浏览器同源策略的硬性限制。安全隔离不是“如何让它们共用”,而是“如何在完全隔开的前提下,可控地交换必要信息”。核心思路是:切断直接访问路径,只保留一条受控的消息通道,并对通道两端做严格校验。
iframe 默认天然隔离全局作用域
跨域 iframe 加载后,父页面和子页面的 window、document、localStorage、Cookie 等全部互不可见。子页面无法读取 window.parent.xxx,父页面也无法执行 iframe.contentWindow.xxxFunction()。这不是 bug,是浏览器强制执行的安全边界。
这种隔离是默认生效的,不需要额外配置。只要协议、域名、端口任意一项不同,全局作用域就自动断开。
用 sandbox 属性进一步收紧子页面权限
仅靠跨域本身还不够——如果子页面来自不可信来源(比如用户上传的 HTML),它仍可能通过脚本执行发起恶意行为。这时要主动加锁:
- 去掉
allow-same-origin:防止子页面伪造同源、绕过跨域限制 - 只开必要权限,例如
sandbox="allow-scripts allow-popups" - 禁用表单提交、插件、自动播放等高风险能力
加上 sandbox 后,子页面连自己的 top.location 都无法访问,更不可能污染父页面的全局对象。
将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。
postMessage 是唯一被允许的“有门禁的走廊”
浏览器只开放 postMessage 和 message 事件作为跨域通信接口。但它本身不安全,必须人工加固:
- 发送时指定精确
targetOrigin,绝不用"*" - 接收时严格校验
event.origin,只响应可信域名 - 对
event.data做结构化校验:检查字段名、类型、长度,拒绝非法格式 - 避免在 message 回调里直接
eval()或拼接 HTML
这样,即便通信通道存在,数据内容和流向也完全可控,全局作用域始终不暴露。
服务端配合做鉴权兜底
前端隔离只能防“偷看”,不能防“冒充”。比如子页面假装是某报表系统,向父页面索要 token。真正安全的做法是:
- 父页面不直接传敏感凭证(如 JWT、session ID)给 iframe
- 改用短期有效的、绑定 origin 的临时票据(如带签名的一次性 access_token)
- 子页面后续所有 API 请求,由服务端验证该票据 + referer + origin 头三重匹配
这样即使消息被截获或伪造,也没法用于真实业务请求。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










