2

为了防止您的网站发生点击劫持,我注意到了几种不同的方法。有些人使用 javascript 让您的网站脱离 iframe,另一种解决方案是将 X-FRAME-OPTIONS 标头设置为 DENY 或 SAMEORIGIN。您认为我提到的两种方法中的哪一种更安全?这是我用来测试点击劫持的示例页面。

<HTML>
<BODY>
<H1>Clickjacking Test</H1>
<IFRAME SRC="http://www.google.com/" HEIGHT="500" WIDTH="500"></IFRAME>
</BODY>
</HTML>

使用 iframe 中断代码,您将看到 Firefox 和 Safari 退出 iframe 的速度很慢,这意味着您将看到 Clickjacking 测试,然后它将突破该 iframe 并显示原始网站。使用 IE 和 Chrome 速度快到不明显。但是使用 X-Frame-Options 解决方案,您根本看不到您的网站。它将被阻止。就像上面例子中的谷歌一样。所以我的问题是哪个解决方案更好?完全阻止它或脱离 iframe(在 2 个浏览器中速度很慢)

4

2 回答 2

3

根据我的经验,设置X-Frame-Options (XFO)规则比打破 iframe 要好得多。说到规则,这真的取决于你是否绝对必须使用 iframe。如果您可以从您的网站中完全删除 iframe,最好使用 DENY 规则;但是,如果您的站点中仍有 iframe,请使用 SAMEORIGIN 规则。

可用规则之间的差异概述如下(引自 IETF):

  1. 拒绝 接收带有此标头的内容的浏览器不得在任何帧中显示此内容。

  2. SAMEORIGIN 接收带有此标头的内容的浏览器不得在来自与内容本身不同来源的页面的任何框架中显示此内容。如果浏览器或插件不能可靠地确定内容的来源和框架是否具有相同的来源,则必须将其视为“拒绝”。[待定]如果顶级浏览上下文的来源与包含 X-FRAME-OPTIONS 标头的页面的来源不同,则不会显示当前实现。

  3. ALLOW-FROM (后跟受信任来源的 URI)接收具有此标头的内容的浏览器不得在来自与所列来源不同来源的页面的任何框架中显示此内容。虽然这会使页面暴露于受信任来源的风险,但在某些情况下,可能需要使用来自其他域的内容。例如:X-FRAME-OPTIONS: ALLOW-FROM https://www.domain.com/

我还建议阅读,点击劫持攻击——特洛伊·亨特(Troy Hunt)在你面前隐藏的威胁。

希望这可以帮助。

于 2013-08-12T21:10:29.673 回答
3

X-Frame-Options是“正确”的解决方案,它通过完全阻止取景来解决问题。这是更好的方法,但仍有一些浏览器不支持它(尤其是 IE<8)。因此,要涵盖这些情况,您还需要一个 JavaScript 解决方案

JavaScript framebusters 有两个问题:

首先:他们中的大多数人试图“突破”框架,用他们的文档替换主窗口。然而,父窗口中的攻击者文档可以很容易地抵抗被导航,尽管有变通方法,他们可以[总是自己被规避] Frame Buster Buster ...需要破坏代码)。如果您的脚本检测到您被陷害,从安全角度来看,更好的解决方案是使整个页面无法使用,例如通过设置document.body.innerHTML错误消息。

父导航方法的出现是因为 framebuster 起源于网站管理员逃避来自搜索引擎等网站的不需要的框架的一种手段。这对他们来说不是安全问题,他们不想通过禁止访问而丢失任何流量,因此他们选择了不提供安全性的解决方案。

其次:可以防止framebusters运行,通过在带有IEsecurity="restricted"属性的iframe中运行框架,或者通过对XSS过滤器的误报攻击,或者仅仅因为用户关闭了JS。您可以通过让页面在启用 JavaScript 时工作来解决此问题,但这会产生明显的负面可访问性影响。

于 2013-08-13T12:40:28.010 回答