为什么iframe被认为是危险的和安全风险?能否举一个恶意使用它的案例?
为什么iframe被认为是危险的和安全风险?能否举一个恶意使用它的案例?
IFRAME
元素如果您的网站嵌入到恶意网站的IFRAME
中可能存在安全风险。搜索谷歌"点击劫持"获取更多详细信息。请注意,无论您是否使用<iframe>
,这都不重要。唯一真正的保护措施是添加HTTP头X-Frame-Options: DENY
并希望浏览器能够正确处理。
如果有人声称在您的网站上使用<iframe>
,它允许从iframe内部的内容扩展漏洞到主机文档。问题是关于<iframe>
是否危险,如果主机文档存在XSS漏洞,则确实不需要<iframe>
元素。 - Mikko Rantalainen一旦你展示来自另一个域名的内容,实际上就是在相信该域名不会提供恶意软件。
iframe 本身没有问题。如果你控制 iframe 的内容,它们是完全安全的。
<iframe>
内容可以被攻击者修改,那么可能会导致安全风险。这将允许攻击者将 XSS 攻击扩展到引用该 <iframe>
的您网站上的任何页面上。有关详细信息,请参见 https://dev59.com/3Ww05IYBdhLWcg3wXAmF#9428051。 - Mikko Rantalainen假设您控制了跨域的iFrame,因为如果您自己控制它,风险可能会更低。
当你“使用IFRAMEs”时,并不只代表一件事。这是一个词义模糊。根据使用情况,“使用IFRAMEs”可能意味着以下几种情况之一:
- 别人在IFRAME中显示你的内容
- 你在IFRAME中显示别人的内容
- 你在IFRAME中显示自己的内容
1. 别人在IFRAME中显示你的内容
这种情况几乎总是被称为点击劫持 - 模仿你网站的行为,试图诱使你的用户使用一个假的用户界面而不是真正的网站。这里的误解在于,你是否使用IFRAMEs并不重要,这只是你的决定 - 是别人使用IFRAMEs,你对此无能为力。顺便说一下,即使他们不需要特别使用IFRAMEs:他们可以通过其他方式复制你的网站,窃取你的HTML,从头开始实现一个假网站等等。
因此,为了防止点击劫持而放弃使用IFRAMEs - 这完全没有意义。
2. 你展示了别人的内容src
,告诉它要显示什么。不要让用户加载任意内容到你的页面中,这是所有问题的根源。但这与是否使用iframe无关,它与使用script
或style
标签(没有它们你就没法生活了)一样,问题在于你让它们出现。你的网站上任何包含用户提供内容的输出都是有风险的。如果不对其进行清理(去除HTML标记),你基本上是在为XSS攻击打开你的网站,任何人都可以在你的内容中插入一个<script>
标签,这是个坏消息。真的,非常糟糕的消息。
绝对不要输出任何用户输入,除非你确保它是无害的。
所以,虽然iframes再次变得无害,但要记住:除非你信任来源,否则不要让它们显示第三方内容。换句话说,不要在你的网站中包含不受信任的内容。(还有,不要跳到快速接近的货车前面。呃。)
3. 在iframe中显示自己的内容
这个显然是无害的。你的页面是可信的,iframe内部的内容是可信的,没有什么会出错。Iframe并不是什么魔术技巧;它只是一种封装技术,你完全有权利在一个沙盒中显示你的一部分内容。它就像把它放在一个div或其他任何地方一样,只是它有自己的文档环境。
iframe
是完全安全的。你也可以责怪script
标签是危险的;任何东西在网站中恶意插入都可能引起麻烦。但是,他们是如何首次插入的呢?如果有人能够将HTML内容注入网站,那肯定存在后端漏洞。将一个技术组件归咎于一种常见攻击(而不是找到真正的原因),只是等于让安全漏洞一直存在。要找到火灾背后的幕后黑手。
不经过消毒的输出是不好的;但iframe
并非如此。
iframe
嵌入自己的内容通常不是一个好主意。这是一个糟糕架构解决方案的标志。它可能会导致维护网站时出现所有问题,例如:如果您需要在 iframe
中包含全局样式/脚本怎么办?如何处理可用性问题(移动设备、屏幕阅读器等)?跨域严格限制可能会引起一些信任问题,因此我们不能假设在 iframe
内部,一切都应该“正常工作”... - Mr. Duc Nguyeniframe 也容易受到跨域脚本攻击的影响:
我来这里是为了弄清楚一个远程网站的HTML/CSS/JS是否可以被任何人在本地获取,比如通过浏览器 > 设置 > 查看页面源代码或开发者工具,因为我打算使用<iframe>
来确保客户端安全性。我没有找到明确的答案。我在MDM中查过了,没有找到防止访问<iframe>
内容的方法。我做了一个实验,发现两种方法都可以查看到远程源代码。所以,<iframe>
无法提供客户端安全性。