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

时间:2011-09-02 20:57:38

标签: html security iframe

为什么iframe被认为是危险的并且存在安全隐患?有人可以描述一个可以被恶意使用的案例吗?

6 个答案:

答案 0 :(得分:113)

如果您的网站嵌入在恶意网站上的IFRAME ,则IFRAME元素可能存在安全风险。 Google“clickjacking”了解更多详情。请注意,是否使用<iframe>并不重要。对此攻击的唯一真正保护是添加HTTP标头X-Frame-Options: DENY,并希望浏览器知道它的工作。

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

这是问题的技术方面。 此外,还存在用户界面问题。如果您教导您的用户相信网页栏在点击链接时不会更改(例如您的网站使用包含所有实际内容的大iframe)然后,如果出现实际的安全漏洞,用户将来不会注意到任何事情。例如,您的网站中可能存在一个XSS漏洞,该漏洞允许攻击者从您的iframe中的恶意来源加载内容。没有人能说出差异,因为URL栏看起来仍然与以前的行为相同(从不改变),内容“看起来”有效,即使它来自恶意域请求用户凭据。

如果有人声称在您的网站上使用<iframe>元素是危险的并且会带来安全风险,那么他不会理解<iframe>元素的作用,或者他在谈论{{1}的可能性浏览器中的相关漏洞。只要浏览器中没有漏洞,<iframe>标记的安全性就等于<iframe src="..."><img src="..."。如果存在合适的漏洞,即使不使用<a href="..."><iframe><img>元素也可能触发它,因此不值得考虑此问题。

但是,会收到警告,<a>的内容可以默认启动顶级导航。也就是说,允许<iframe>内的内容自动打开当前页面位置上的链接(新位置将在地址栏中可见)。避免这种情况的唯一方法是添加sandbox属性而不使用值<iframe>。例如,allow-top-navigation。不幸的是,沙箱也会一直禁用所有插件。例如,Youtube内容无法进行沙盒处理,因为仍然需要Flash播放器才能查看所有Youtube内容。没有浏览器支持同时使用插件和禁止顶级导航。

请注意,<iframe sandbox="allow-forms allow-scripts" ...>还可以防止呈现可以读取内容跨源的性能侧通道攻击(也称为“Pixel perfect Timing Attacks”)。

答案 1 :(得分:68)

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

iframe本身并没有错。如果您控制iframe的内容,那么它们就非常安全。

答案 2 :(得分:13)

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

    如果您的网站包含为iframe,则
  • 点击劫持会出现问题
  • 受感染的iFrame可能会显示恶意内容(想象一下iFrame会显示一个登录框而非广告)
  • 包含的iframe可以使某些JS调用如警报和提示,这可能会惹恼您的用户
  • 包含的iframe可以通过location.href重定向(yikes,想象一个3p框架将客户从bankofamerica.com重定向到bankofamerica.fake.com)
  • 3p框架内的恶意软件(java / flash / activeX)可能会感染您的用户

答案 3 :(得分:4)

IFRAME 没问题;都市传说不是。

当您“使用 iframe”时,它不仅仅意味着一件事。这是一个词汇歧义。根据用例,“使用 iframe”可能意味着以下情况之一:

<块引用>
  1. 其他人在 iframe 中显示您的内容
  2. 您在 iframe 中显示其他人的内容
  3. 您在 iframe 中显示自己的内容

那么哪些情况会让您面临风险?

1.其他人显示您的内容

这种情况几乎总是被称为点击劫持 - 模仿您网站的行为,试图引诱您的用户使用虚假用户界面而不是真实网站。这里的误解是您使用或不使用 iframes 无关紧要,这根本不是您的要求 - 这是其他人使用 iframes,您对此无能为力。顺便说一句,即使他们并不特别需要它们:他们可以以任何其他方式复制您的网站、窃取您的 html、从头开始实施虚假网站等。

因此,放弃 iframe 以防止点击劫持 - 这完全是零意义。

2.您展示了其他人的内容

在以上三篇文章中,这是唯一一篇有点风险,但是您一直阅读的大多数恐怖文章都来自于 same-origin policy 被介绍之前的世界。现在,仍然不建议将任何站点都包含在您自己的站点中(谁知道明天会包含什么?),但是如果它是可信来源(accuweather、yahoo 股票信息等),您可以安全地这样做。这里最大的禁忌是让用户(因此,恶意用户)控制 iframe 的 src,告诉它显示什么。 不要让用户将任意内容加载到您的页面中,这是万恶之源。但有或没有 iframe 都是如此。这与他们无关;使用 scriptstyle 标签可能会发生这种情况(没有它们祝你好运) - 问题是你让它们出去了。您网站上包含任何用户提供的内容的任何输出都是有风险的。如果不对其进行清理(去 HTML 化),您基本上就是在为 XSS 攻击打开您的网站,任何人都可以在您的内容中插入 <script> 标签,这是个坏消息。比如,baaaad 新闻。

永远不要输出任何用户输入,除非确定它是无害的。

因此,虽然 iframe 再次是无辜的,但要点是:除非您信任来源,否则不要让它们显示 3rd 方内容。换句话说,不要在您的网站中包含不受信任的内容。 (另外,不要在快速驶来的货运列车前面跳跃。呃。)

3.您在 iframe 中显示自己的内容

这个显然是无害的。您的页面是可信的,iframe 的内部内容是可信的,不会出错。 iframe 不是魔术;这只是一种封装技术,您绝对有权在沙箱中显示您的一部分内容。这很像把它放在一个 div 或其他任何东西中,只是它会有自己的文档环境。

TL;DR

  • 案例 1:是否使用 iframe 并不重要,
  • 案例 2:不是 iframe 问题,
  • 案例 3:绝对无害的案例。

请不要相信都市传说。事实是,iframe-s 是完全安全的。你也可以把危险归咎于 script 标签;当恶意插入站点时,任何东西都可能导致麻烦。但是他们一开始是怎么插入的呢?如果有人能够将 html 内容注入站点,则必须存在后端漏洞。将一项常见攻击归咎于一项技术(而不是找到真正的原因)只是保持安全漏洞开放的同义词。找到火背后的龙。

未经消毒的输出很糟糕; iframe 不是。
停止猎巫。

答案 4 :(得分:2)

当人们提到iframe时,“危险”和“安全风险”并不是人们想到的第一件事......但它们可以在clickjacking攻击中使用。

答案 5 :(得分:0)

ifram还是针对跨框架脚本“ https://www.owasp.org/index.php/Cross_Frame_Scripting”的漏洞