是否可以访问 <iframe> 中显示的远程站点的源 HTML/CSS/JS?

Can the source HTML/CSS/JS of a remote site shown in an <iframe> be accessed?

提问人:David Spector 提问时间:7/9/2023 最后编辑:starballDavid Spector 更新时间:7/15/2023 访问量:35

问:

很明显,为了给服务器端 Web 编程提供良好的安全性,在设计 Web 基础结构时已经花了很多心思。然而,除了使用商业安全机制通过我们的浏览器流式传输商业视频内容外,似乎没有注意到为浏览器显示的材料提供客户端安全的问题。

我查看了优秀的 MDN Web Docs (https://developer.mozilla.org/en-US/docs),但找不到任何提供或不提供客户端安全性的保证。是吗?<iframe>

HTML 安全 客户端

评论

0赞 starball 7/11/2023
1)通过什么访问?2) developer.mozilla.org/en-US/docs/Web/Security/...
0赞 David Spector 7/12/2023
您引用的页面指出 JavaScript 无法跨不同域读取 DOM 数据。但是,我可以从本地计算机访问远程站点上的 iframe。这不是不同的域吗?至少主机名是不同的。
0赞 starball 7/13/2023
您可以作为用户操作用户代理并使用其面向用户的工具。来自不同域的脚本不能相互“接触”。关于这种区别,你的问题不清楚。或者你想让我写一个答案吗?这里的“域”是不同脚本的域,而不是脚本和用户计算机的域。
0赞 David Spector 7/14/2023
如果能得到这样的回答,我将不胜感激。但是,从我的实验中已经很清楚,如果没有其他客户端安全机制,iframe 几乎毫无用处。除非我们的浏览器至少有一部分是在 Ring 0 中实现的,否则我们没有太多机会将服务器端安全性扩展到客户端。对于客户端不安全的其他领域也是如此,例如电子邮件或需要通过电子邮件或电话进行身份验证,或者消除所有登录以及所有垃圾邮件和恶意软件。如果没有客户端安全和/或有效执行法律,这一切都无法实现。
0赞 starball 7/14/2023
“客户端安全”是什么意思?你的意思是不让用户查看他们正在查看的页面的源代码(HTML/CSS/JS/等)?并且不允许用户使用开发工具?在 DevTools 中可检查的 iframe 并非特定于 iframe。任何包含 iframe 的内容也可以在 devtools 中检查。我很困惑你为什么对 iframe 很讲究。你能解释一下吗?

答:

-1赞 starball 7/15/2023 #1

如果您担心安全性,请注意,网站可以响应请求,并指定不应通过请求用户代理将其嵌入 iframe 中。请参阅 X-Frame-Options HTTP 标头frame-ancestors 内容安全策略

如果您对保护嵌入器(而不是嵌入器)感兴趣,请参阅 <iframe>s 的 allow 属性

您关心的主要安全机制是同源策略,它基本上是来自不同来源的资源不应相互访问。如果你想阅读更多关于它的信息,你可能对这个主题的MDN页面和维基百科页面感兴趣。

来自不同来源的资源可以通过多种方式进行合作(基本上双方都同意进行通信),例如 window.postMessage。如果 iframe 页面与父框架来自同一来源,那么是的,父框架可以“进入”子框架的 DOM。例如,从 iFrame 中获取元素

操作用户代理(例如浏览器)的用户仍然可以使用用户代理提供的工具来检查站点的资源,但这并不是一个安全问题 - 除非用户非常有意地成为信息从一个来源的资源到达另一个来源的资源的侧通道。例如,从浏览器开发工具中复制和粘贴内容。