问题描述

为什么 iframe 被认为是危险的,有安全隐患?有人可以描述可以恶意使用的情况吗?

最佳解决方案

一旦您显示来自其他域的内容,您基本上信任该域名不是 serve-up 恶意软件。

iframe 本身没有任何问题。如果你控制 iframe 的内容,它们是完全安全的。

次佳解决方案

如果您的站点嵌入在敌对站点上的 IFRAME 内,则 IFRAME 元素可能会面临安全隐患。 Google “clickjacking” 了解更多详情。请注意,如果您使用<iframe> 并不重要。唯一真正的防范这种攻击是添加 HTTP 头 X-Frame-Options: DENY,并希望浏览器知道它的工作。

此外,如果您的站点上的任何页面包含可以利用的 XSS 漏洞,则 IFRAME 元素可能是安全风险。在这种情况下,攻击者可以将 XSS 攻击扩展到同一域内的任何页面,该页面可以被说服在具有 XSS 漏洞的页面上的<iframe> 中加载。这是因为允许来自相同来源 (同一域) 的内容访问父内容 DOM(实际上在”host” 文档中执行 JavaScript) 。来自此攻击的唯一真正的保护方法是添加 HTTP 头 X-Frame-Options: DENY 和/或始终正确编码所有用户提交的数据 (即,您的站点上永远不会有 XSS 漏洞 – 更容易说完成) 。

这是问题的技术方面。另外还有用户界面的问题。如果你教你的用户信任 URL 链接应该不会改变,当他们点击链接 (例如,你的网站使用一个大的 iframe 与所有的实际内容),那么用户将来不会注意到在任何情况下,在实际的安全漏洞。例如,您的站点中可能会出现 XSS 漏洞,从而允许攻击者从您的 iframe 中的恶意源中加载内容。没有人可以告诉区别,因为 URL 栏仍然与以前的行为 (从不更改) 相同,并且内容”looks” 有效,即使它来自恶意域请求用户凭据。

如果有人声称在您的站点上使用<iframe> 元素是危险的并且导致安全风险,他不明白<iframe> 元素是什么,或者他在谈论<iframe> 相关漏洞在浏览器中的可能性。 <iframe src="..."> 标签的安全性等于<img src="..."<a href="...">,只要浏览器中没有漏洞。如果有一个合适的漏洞,即使没有使用<iframe><img><a> 元素,也可能触发它,所以不值得考虑这个问题。

但是,请注意,默认情况下,<iframe> 的内容可以启动顶级导航。也就是说,允许<iframe> 中的内容自动打开当前页面位置的链接 (新位置将在地址栏中显示) 。避免这种情况的唯一方法是添加没有值 allow-top-navigationsandbox 属性。例如,<iframe sandbox="allow-forms allow-scripts" ...> 。不幸的是,沙箱还会禁用所有的插件。例如,Youtube 内容不能被沙盒,因为 Flash 播放器仍然需要查看所有的 YouTube 内容。没有浏览器支持使用插件,同时禁止顶级导航。

第三种解决方案

我假设 cross-domain iFrame,因为如果你自己控制的话,风险会降低。

  • 如果您的网站被包含为 iframe,则劫持是一个问题

  • 受损的 iFrame 可能会显示恶意内容 (假设 iFrame 显示登录框而不是广告)

  • 包括的 iframe 可以使某些 JS 调用,如警报和提示,可能会让您的用户烦恼

  • 包含的 iframe 可以通过 location.href 重定向 (yikes,想象一个 3p 框架将客户从 bankofamerica.com 重定向到 bankofamerica.fake.com)

  • 3p 框内的恶意软件 (java /flash /activeX) 可能会感染您的用户

第四种方案

“Dangerous” 和”Security risk” 不是人们提到 iframe 时首先想到的东西,但它们可以用于 clickjacking 攻击。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛