父 iFrame 内容的子 iFrame 哈希验证

信息安全 网页浏览器 javascript 同源策略 科尔斯
2021-09-08 01:20:42

考虑以下场景:

Alice 希望在 Initech 工作期间浏览 Victor 的网站。Victor 的网站托管在 Initech 的 DNS 不与之对等的替代域名系统上。Eve(希望促进自由和开放的知识交流)托管一个包含 JS 的网页,该网页执行域名解析和 URL 屏蔽,这样当 Alice 访问victor.eve.tldiFrame时,会victor.alt根据 Victor 在victor.altDNS 记录中指定的静态 IP 地址加载。

对于无缝的域名屏蔽,Victor 必须将 CORS 授权放在他的站点的标头中,以围绕单一来源策略跳舞。但是,Victor 怀疑 Michael 正试图入侵 Eve 的 Web 服务器并将恶意 JS 植入 Eve 的网页(iFrame 的父级)。Victor 想要验证 Michael 在启用 CORS 授权之前没有修改父框架的内容。

Victor 拥有 Eve 网站的副本,并且可以包含不与 Eve 的服务器联系的材料的哈希值,因此如果他具有读取权限,他可以匹配内容。Micheal 无法访问 Initech 服务器,并且来自两个站点的连接都使用 TLS 保护:假设 Micheal 无法执行中间人攻击。

iFrame 是否可以验证父窗口的内容:

  • 使用任何CORS 配置?
  • 同时允许只读访问?
  • 同时限制父窗口对 iFrame 内容的访问?

之前已经讨论过来自不受信任的缓存(具有受信任的连接,没有 MtM)的客户端 JS 验证,但这种情况需要通过正在获取的材料进行验证。还有许多关于使用iFrame 对不受信任的代码进行沙箱处理的帖子但是,iFrame 沙盒问题往往围绕信任孩子的父窗口展开,大多数关于该主题的外部文献(框架破坏等)也是如此。

此外,Eve 的服务器不能主动参与该过程:她只能提供静态 HTML、JS 和 CSS 文件。Victor 无法通过 Eve 的服务器代理信息,他只能与自己的或第三方服务器交互。

1个回答
  • 使用任何 CORS 配置?

如果 Eve 将她的 CORS 标头设置为 Access-Control-Allow-Origin "victor.alt"Victor 可以验证它检索的 HTML 的内容并验证所有引用的脚本。

  • 同时允许只读访问?
  • 同时限制父窗口对 iFrame 内容的访问?

这些都不存在,一个 iFrame 无法读取另一个 iFrame 的内容,除非它们在同一个域中。

但是,您可以将任何想要对 Victor 保密的用户信息推送到沙盒 iFrame 中,并使用window.postMessage在框架之间进行通信。Victor 可以监控两者之间的活动,以确保没有信息泄露。