为什么iframe被认为是危险的,存在安全风险?

为什么iframe被认为是危险的,存在安全风险? 有人可以描述一个可以恶意使用的例子吗?

只要您显示来自其他域的内容,就基本上相信该域不会提供恶意软件。

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

如果您的网站embedded在敌对网站的IFRAME IFRAME元素可能会带来安全风险。 谷歌“clickjacking”了解更多细节。 请注意,如果使用<iframe> ,则无关紧要。 这个攻击唯一真正的保护是添加HTTP头X-Frame-Options: DENY并希望浏览器知道它的工作。

另外, 如果您的站点上的任何页面包含可被利用的XSS漏洞,则IFRAME元素可能存在安全风险 。 在这种情况下,攻击者可以将XSS攻击扩展到同一域中的任何页面,这些页面可以被说服加载到具有XSS漏洞的页面上的<iframe>内。 这是因为来自相同来源(同一个域)的内容被允许访问父内容DOM(实际上在“主机”文档中执行JavaScript)。 这种攻击的唯一真正的保护方法是添加HTTP头X-Frame-Options: DENY和/或总是正确地编码所有用户提交的数据(也就是说,从来没有在您的网站上存在XSS漏洞 – 说起来容易做起来难)。

这是问题的技术方面。 另外还有用户界面的问题。 如果您教导您的用户信任URL栏在点击链接时不会改变(例如,您的站点使用包含所有实际内容的大型iframe),那么在实际安全的情况下,用户将不会注意到任何事情漏洞。 例如,您的站点中可能存在XSS漏洞,允许攻击者从您的iframe中加载来自恶意源的内容。 没有人能分辨出来,因为URL栏看起来和以前的行为看起来是完全一样的(从不改变),即使内容来自请求用户凭证的恶意域,“看起来”也是有效的。

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

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

我假设跨域iFrame,因为如果你自己控制它,风险可能会更低。

  • 如果您的网站包含在iframe中,那么点击劫持是个问题
  • 受损的iFrame可能会显示恶意内容(假设iFrame显示login框而不是广告)
  • 包含的iframe可以使某些JS调用像警报和提示,这可能会惹恼你的用户
  • 包含的iframe可以通过location.hrefredirect(比如,假设一个3p框架将客户从bankofamerica.comredirect到bankofamerica.fake.com)
  • 3p框架内的恶意软件(java / flash / activeX)可能会感染您的用户

人们提到iframe时,“危险”和“安全风险”并不是第一个想到的东西,但是它们可以用于点击劫持攻击。