要停止ClickJacking,哪一个更安全?突破iframe与X-Frame-Options拒绝或同源

To stop ClickJacking, which one is more secure? breaking out of iframe vs X-Frame-Options to Deny or Same Origin

本文关键字:X-Frame-Options iframe 拒绝 突破 ClickJacking 哪一个 安全      更新时间:2023-09-26

为了防止您的网站发生点击劫持,我注意到了几种不同的方法。有些人使用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的速度会很慢,这意味着你会看到点击劫持测试,然后它会跳出该iframe并显示原始网站。有了IE和Chrome,它的速度很快,但并不引人注目。但是使用X-Frame-Options解决方案,您根本看不到您的网站。它将被阻塞。就像上面例子中的谷歌一样。所以我的问题是哪种解决方案更好?完全阻止它或突破iframe(在2个浏览器中速度较慢)

根据我的经验,设置X-Frame-Options (XFO)规则比打破iframe效果要好得多。当涉及到规则时,这实际上取决于你是否必须使用iframe。如果你能从你的网站上完全删除iframe,那么最好使用DENY规则;但是,如果您的站点中仍然有iframe,请使用SAMEORIGIN规则。

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

  1. 丹尼接收到此标题内容的浏览器不得显示任何帧中的此内容。

  2. SAMEORIGIN接收到此标题内容的浏览器不得显示来自不同来源页面的任何框架中的此内容内容本身。如果浏览器或插件不能可靠地确定内容和框架的原点相同,这必须被视为";DENY";。[TBD]如果顶级浏览上下文与包含X-FRAME-OPTIONS标题的页面。

  3. ALLOW-FROM(后面是可信来源的URI)接收到此标题内容的浏览器不得显示来自不同来源页面的任何框架中的此内容列出的原产地。虽然这可能会使页面面临风险受信任的来源,在某些情况下可能需要使用来自其他域的内容。例如:X-FRAME-OPTIONS:ALLOW-FROMhttps://www.domain.com/

我还建议阅读特洛伊·亨特的《点击杰克攻击——就在你面前的隐藏威胁》。

希望这能有所帮助。

X-Frame-Options是"正确"的解决方案,它通过完全阻塞帧来解决问题。这是一种更好的方法,但仍有一些浏览器不支持它(最显著的是IE<8)。因此,为了涵盖这些情况,您还需要一个JavaScript解决方案。

JavaScript帧拦截器有两个问题:

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

父导航方法之所以出现,是因为框架破坏者最初是网站管理员从搜索引擎等网站上逃离不需要的框架的一种手段。这对他们来说不是安全问题,他们也不想因为禁止访问而失去任何流量,所以他们选择了一个不提供安全性的解决方案。

第二:可以通过在具有IE的security="restricted"属性的iframe中运行帧,或者通过对XSS过滤器的假阳性攻击,或者仅仅因为用户关闭了JS,来阻止framebusters的运行。你可以通过在启用JavaScript时让页面只运行来解决这个问题,但这会对可访问性产生明显的负面影响。