IFrame 和 Frame 有什么区别?

115

在研究将3D安全页面嵌入我的订单表单的选项时,我遇到了以下内容:

“一些商业站点会将整个浏览器页面用于身份验证,而不是使用框架(不一定是一个iFrame,因为它是一个不太安全的对象)。”

引自http://en.wikipedia.org/wiki/3-D_Secure

有人能告诉我为什么iFrames比普通框架更不安全,会导致问题吗?基本区别是什么?

从我看来,iFrame是可行的方法。


请看这里:http://www.differencebetween.info/difference-between-frame-and-iframe。 - Daniel Dušek
4
<frame> 在 HTML5 中已被弃用,因此您不应再使用它。 - Michael Hays
7个回答

78
区别在于 iframe 能够“浮动”在页面内容中,也就是说你可以创建一个 html 页面并将 iframe 定位在其中。这允许你在一个页面中放置另一个文档。而frameset则允许您将屏幕分成不同的页面(水平和垂直)并在每个部分显示不同的文档。
阅读IFrames安全摘要

似乎这些安全问题不会应用于我,因为我会直接引用一个安全站点(而且是我100%信任的站点),所以不清楚攻击者如何破坏这个? - Duncan

21

IFrame 就是指“内部框架”。它被认为不太安全的原因是,您可以包含不来自您域名的内容。

这意味着您应该信任您包含在 iFrame 或常规框架中的一切内容。

框架和 IFrame 同样安全(如果您包含来自不受信任源的内容,则同样不安全)。


1
您可以在常规框架中包含不属于您域的内容。 - Quentin
@David,我可能应该明确地说明一下。我想我暗示了这一点,但从未真正陈述过。我会更新我的答案,使其更加清晰。谢谢! - Dan Herbert
1
iframe 中的 i 实际上代表内联。 - Simon Zyx

14

基本上,<frame>标签和<iframe>标签之间的区别在于:

当我们使用<frame>标签时,网页的内容由框架组成,这些框架仅通过使用<frame><frameset>标签来创建(且不使用<body>标签),如下所示:

<html>
<head>
<title>HTML Frames</title>
</head>
<frameset rows="20%,70%,10%">
   <frame name="top" src="/html/top.html" />
   <frame name="main" src="/html/main.html" />
   <frame name="bottom" src="/html/bottom.html" />
</frameset>
</html>

当我们使用 <iframe> 时,网页的内容不包含帧,而是通过使用 <body> 标签创建网页的内容(并且不使用 <frame><frameset> 标签):

<html>
<head>
<title>HTML Iframes</title>
</head>
<body>
<p>See the video</p>
 <iframe width="854" height="480" src="https://www.youtube.com/embed/2eabXBvw4oI"
    frameborder="0"    allowfullscreen>
  </iframe>
</body>
</html>

<iframe>标签可以将其他来源的文档嵌入到网页中,用于指定内联框架或浮动框架。万维网联盟(W3C)在HTML 4.01中包含了<iframe>功能。相比之下,<frameset>标签用于创建带有<frame>标签的框架,而<iframe>同时具有<frame><frameset>标签的功能。与<frame>标签不同的是,<iframe>标签也可以放置在<body>标签中。 注意:在HTML5中,<frame>标签和<frameset>标签已被弃用。

由于现在使用<frame><frameset>标签已经过时,因此Web开发人员使用<body>标签来创建网页的内容,并使用<iframe>标签将其他来源的文档嵌入到网页中。但是,即使<frame>标签也用于嵌入其他来源的文档到网页中,<iframe>标签也用于创建框架。


14

iframe用于包含完整的页面。当这些页面托管在另一个域上时,会出现跨站脚本等问题。有方法可以解决这个问题。

框架被用来将您的页面分成多个部分(例如,左侧导航菜单)。不建议使用它们。


1
框架用于将您的页面分为多个部分。例如,在左侧放置菜单。但是,现在不应该使用框架。这种做法在几年前很常见,但现在大多数情况下应该使用服务器端包含和CSS来制作菜单。这样可以在长期内获得更大的灵活性。http://www.velvetblues.com/web-development-blog/why-you-should-not-use-frames-in-your-website/ 上有关于此主题的一些信息。 - Esteban Küber
16
我知道 :) 我只是想解释一下“were”这个词的使用场景(100年前 ;) )。 - Ivo

7
我能想到的唯一原因实际上在您参考的维基百科文章中提到了几个...

“‘Verified by Visa’系统受到了一些批评,因为用户很难区分合法的‘Verified by Visa’弹出窗口或嵌入式框架和欺诈钓鱼网站。”

“截至2008年,大多数Web浏览器没有提供一种简单的方法来检查iframe内容的安全证书。”

如果您阅读文章中的批评部分,它详细说明了所有潜在的安全漏洞。

否则,唯一的区别是IFrame是嵌入式框架,而FrameFrameset的一部分。这意味着更多的布局问题而不是其他任何问题!


6

内嵌框架只是一个“盒子”,可以放置在您网站的任何位置。 框架是一组“盒子”组合在一起,用于创建具有多个页面的网站。


-2

虽然安全性相同,但使用 iframe 的欺诈应用程序更容易欺骗用户,因为它们在放置框架的位置方面具有更大的灵活性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接