不知道从什么时候开始,在什么东西上面都有个日期,秋刀鱼会过期,肉罐头会过期,连保鲜纸都会过期,我开始怀疑,在这个世界上,还有什么东西是不会过期的? ——《重庆森林》
- 界面操作劫持攻击:通过在网页的可见输入控件上,覆盖一个不可见的框(iframe),在用户不知情的情况下,窃取敏感信息、篡改数据等
何为点击劫持
- 视觉欺骗,hacker使用一个透明的iframe覆盖在网页上,然后诱导用户在该页面上操作,通过调整iframe的位置,让用户在不知不觉中在iframe上操作
场景:
在http://www.a.com/test.html
页面中插入一个iframe
1 | <!DOCTYPE html> |
起关键作用的代码是:
1 | iframe{ |
- 通过设置iframe的长、宽,以及调整top、left位置,可以把iframe镶嵌在任何位置
- 通过设置position为absolute,作用是确保它不会被其他东西覆盖,再把z-index调整到最大,来让iframe处于页面的最上层
- 最后,通过设置opacity来控制iframe的透明度,值为0时,完全看不见
CSRF和点击劫持
共同点:在用户不知情的情况下,诱使用户完成一些动作
不同点:
- CSRF在攻击过程中,如果出现用户交互,攻击就无法顺利成功
- 点击劫持利用的正是与用户交互的界面
图片覆盖攻击
XSIO:通过调整图片的style使得图片可以覆盖到hacker所指定的位置上
hacker在服务器源码中,插入(可以通过XSS或者CSRF进行插入):
1 | <a href="http://disenchant.ch"> |
使得原页面的logo被覆盖了,且指向了一个不安全的网址。
- XSIO不同于XSS,它希望控制的只是图片的style,甚至整个CSS。如果没有在style中设置position为absolute,hacker的图片就可以覆盖到任何位置
- hacker的图片还可以伪装的像一个正常的链接、按钮、甚至构造一些文字、数字,然后覆盖在关键的位置上,从而改变网页原本的意思,即使用户不点击,也会被欺骗
拖拽劫持
- 拖拽操作是不受同源策略限制的
- 思路:诱使用户从一个看不见的iframe中拖拽出hacker想要的数据,拖拽到hacker可控制的页面中,从而窃取数据
危害
- 实现对其他页面链接的窃取,这些链接中可能会有session key、token等敏感信息
- 把其他浏览器中的页面内容拖放到富文本编辑模式中,这样可以看到页面的源代码,这些html源代码可能会存在敏感信息
dataTransfer对象
- IE5.0后引入了dataTransfer对象,是event对象的一个属性,用于从被拖动的对象传递字符串到放置对象
- dataTransfer对象定义了两个主要方法:getData和setData,语句如下:
1 | event.dataTransfer.setData("text","sometext"); |
- setData把数据存储在剪切板(在html5中,允许指定任意的MINE类型)
- getData用来获取由setData所存储的数据
拖放函数
当鼠标拖动了一个控件,源对象将依次出发以下函数:
- ondrag:在从drag动作开始,到drop动作结束的过程中,源对象触发的一个事件
- ondragstart:在drag动作开始时,源对象上触发的一个事件
- ondragend:在drop动作结束时,源对象上触发的一个事件
当拖动对象到一个有效的目标上时,目的对象将依次触发以下函数:
- ondragenter:在drag动作进入某一有效目的对象时,该目的对象上触发的一个事件
- ondragover:在drag动作进入某一有效目的对象后,该目的对象上触发的一个事件
- ondragleave:在drag动作离开某一有效目的对象时,该目的对象上触发的一个事件
- ondrop:在任何有效目的对象上进行drop操作时,该目的对象上触发的一个事件
触屏劫持
- 手机为了节省屏幕空间,会隐藏地址栏,使得触屏劫持更加不易被发现
- 下面以IOS系统的Safari浏览器为例
桌面浏览器
- Safari可以把网页添加到桌面,成为一个图标
- 添加桌面图标的语句:
1 | <link rel="apple-touch-icon" href="icon.png"/> |
- 添加启动画面的语句:
1 | <link rel="apple-touch-startup-image" href="startup.png"/> |
- 全屏显示语句:
1 | <meta name="apple-mobile-web-app-capable" content="yes"/> |
- 改变状态栏样式(图中的status bar):
1 | <meta name="apple-mobile-web-app-status-bar-style" content="black "> |
经过上面的操作,web页面和app已经差不多了,其中,全屏模式会隐藏URL地址栏和状态栏(URL text field和Button bar)
可视化区域viewport
- viewport就是除去所有工具栏、状态栏、滚动条等之后网页的可视区域(上图中的visible area)
- 移动设备的屏幕大小不同于传统web,需要改变viewport:
1 | <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;"/> |
其中参数含义如下:
- width:viewport的宽度(范围从200到10000,默认980像素)
- initial-scale:初始的缩放比例(范围从0到10)
- maximum-scale:允许用户缩放到的最大比例
- user-scalable:用户是否可以手动缩放
隐藏的URL地址栏
除了全屏模式,还可以用这样的代码实现对URL的隐藏
1 | <body onload="setTimeout(function(){window.scrollTo(0,1) },100);"></body> |
触屏函数
Safari有自己独特的触屏API函数,这些函数可以模拟键鼠的操作:
- touchstart:手指放在屏幕上时触发
- Touchend:手指离开屏幕时触发
- touchmove:手指在屏幕上移动时触发
- touchcancel:系统可以取消touch事件
在这些触屏移动设备中,同样可以使用透明层+iframe方法,然后配合触屏设备中自身的API函数来发起触屏劫持
防御ClickJacking
frame busting
不想自己的网页被iframe:
1 | if(window != window.top){ |
如果想引用同域的框架的话,可以判断域名:
1 | if (top.location.host != window.location.host) { |
- 每一个iframe本质也是一个window
- HTML5中的sandbox属性,都可以限制iframe中的JavaScript脚本执行,从而使得frame busting失效
- 斯坦福的Gustav Rydstedt等人总结了关于“攻击frame busting”的paper,见文章的最后部分
X-Frame-Options
X-Frame-Options作为HTTP头,有3个可选的值:
- DENY:拒绝当前页面加载任何frame页面
- SAMEORIGIN:frame页面的地址只能为同源域名下的页面
- ALLOW-FROM origin:可以定义允许frame加载的页面地址
Busting Frame Busting:a Study of Clickjacking Vulnerabilities on Popular Sites
摘要
Web框架攻击例如使用iframe来劫持用户的Web会话。最常见的防御措施,成为frame busting,防止一个网站从功能上载入一个frame框架,我们研究了Alexa Top-500网站的frame busting 实例,显示所有这些都可以以某种方式而绕过,一些绕过是由浏览器指定的,而其他的是跨浏览器工作的。由此我们建议使用适当的frame busting。
介绍
Frame busing是由旨在防止网页加载到sub_frame中的网页自带的代码或者注释。Frame busing推荐用来防御点击劫持攻击[10]也推荐应用与基于图像的安全认证如雅虎的登陆密码。登陆密码显示用户所选择的图像用于向用户验证雅虎的登陆界面。没有使用frame busting的话,即使顶部的界面并不是真正的雅虎登陆界面,登陆界面还是能够被加载到子框架中以便正确的图像能够显示给用户。新的高级点击劫持技术使用drag-and-drop 从框架中提取和注入数据进一步显示了frame busting的重要性。
上图展示了一个点击劫持攻击:受害站点被嵌入到一个看起来正常页面的iframe 上,当用户和正常界面进行交互的时候他们回无意的与受害站点进行交互。为了防御点击劫持攻击 ,下面这段常用的网站代码展示了简单的frame busting技术:
1 | if ( top .location != location ) top.location=self.location; |
frame busting 代码通常由条件申明和首页导航到正确位置的反作用组成,我们将会看到,这个基本代码相当容易绕过。我们会在论文后面谈论更为复杂的frame busting(及其规避技术)。
我们的工作:我们首先对alex-top 500 的网站使用的frame busting代码进行调查,这些调查包括了银行,社交网络,电子商务,交易和游戏等领域。我们还对所有的美国顶尖的银行进行调查,因为这些都是明显的高风险的劫持目标。第二部分介绍了我们用来定位和提取frame busting代码的半自动化工具。结果显示平均使用了3.5行javascript代码,而最庞大的应用代码使用了25行。大多数的frame busting代码被构造成测试框架的条件块,然后检测框架的反作用。
大多数的顶部导航都指向正确的网页,少数会通过document.write(' ')
来清除框架内容,有些使用外来条件和反动作。我们将在下部分描述我们我找到的frame busting 代码。表1总结了top 500 网站上的frame busting的情况。明显的frame busting远不是普遍存在,这表明劫持攻击仍然被主要网站忽视。
本文组织方式如下:第二部分描述了我们做的调查,第三部分我们转向对frame busting 代码攻击的一些探讨,我们将会演示在现今的代码在主流浏览器中都能被绕过。我们会同时演示新旧两种技术。在第四部分我们会讨论针对特定网站如社交网络或零售站点的对外部frame busting的攻击。第五部分我们讨论了更安全的frame busting策略,同时讨论在基于X-FRAME-OPTIONS头部的frame busting的备用方法。从我们的调查来看只有三个站点使用这个字段,其他所有的frame busting都是基于javascript。
对frame busting的调查
一些top 500站点有大量的内联或者动态加载的javascript代码。手工过滤这些代码来找到frame busting代码段非常困难,更不必说大多数站点使用的javascript混淆和主要源代码打包技术。
为了定位frame busting代码我们使用了一个陈祚HTMLUnit的基于java的浏览器仿真器。作为一个无头部仿真器他可以用来做受限的javascript调试。这样给了我们动态框架页面同时中断在真正的frame busting代码上。尽管这款工具帮了大忙,一些人工的反混淆和追踪打包代码还是需要我们来做。在top 500网站中,许多网站没有在主页上使用frame busting。相反的他们实施在登陆和密码重置的页面使用了frame busting。一些人工工作还需要去定位一些部署了frame busting 的子页面。
流行的frame busting代码
在我们的调查重大多数站点使用的frame busting代码 如表2和3,一些站点部署了多重的反动作和条件作为备份。五个这站点额外地依靠document.referer()
来测试是否框架化,。更多的外部frame bustingcode将会在第四部分讨论。
一般攻击
在讨论更急奇异的frame busting代码之前,我们首先讨论大量的攻击方法,如表2和3所示,在这部分最后我们在表4之中给出这类攻击的总结。
双框架
在表3中一些计数动作通过给parent.location赋值来导向正确的页面,如果受害站点是单页面框架的国华这个方法工作分很好,然而,我们发现攻击者如果将目标双框架化,由此parent.location就变成了所有流行浏览器的一个安全违例,因为底部框架的导航策略是由我们定义且应用的。安全违例禁用了计数动作导航。
例子:受害站点的frame busting代码
1 | if ( top.location ! = self.location){ |
onBeforeUnload 事件
用户何以手动取消由框架页面提交的导航请求。为了利用这个页面,可注册一个由于导航无论何时都不会被框架页面加载的onBeforeUnload句柄。句柄返回一个回显给用户的字符串,假设攻击者框架paypal,他注册一个不加载的句柄函数赖回显一个字符串:do you want to exit paypal?当这个字符串回显给用户的时候,用户极有可能退出导航,这样久挫败了paypal 的frame busting代码。
攻击者通过在顶部页面使用以下代码来注册一个不被加载的函数来发动攻击
1 | <script> |
paypal的frame busting代码将会生成一个BeforeUnload事件激活我们的函数并且促使用户取消导航。
OnBeforeUnload – 204 Flushing
虽然以前的攻击要求用户的交互但是同样的攻击必在需要了。大多数浏览器(IE7, IE8,
Google Chrome, and Firefox)能够使攻击者通过多次提交收到 204-无内容响应的请求自动地在一个OnBeforeUnload的句柄事件取消到来的导航请求。导向一个无内容站点是一个NOP,但会冲刷请求管道,于此取消原始的导航请求。这里有一段实现代码
1 | var prevent_bust = 0 |
利用XSS过滤器
IE8和chrome引入了反射性XSS过滤器来保护web页面存在的各种XSS漏洞,Nava 和 Lindsay发现这些过滤器可被用来绕过frame busting代码。
IE8
IE8的XSS过滤器将请求参数和一系列的正则表达式对比来识别明显的跨站脚本。使用“includeing false positives”,过滤器可被用来禁用选定的脚本。通过对比请求参数中的任意脚的开始标签,XSS过滤器将禁用所有页面内嵌脚本,包括frame busting 脚本。 外部脚本也可作目标当外部匹配包含进来的时候,这样有效的禁用了所有外部脚本。自从js的加载块子部分能够函数化(内嵌或者外部的)和cookie可获取,这种方式对点击劫持攻击来说很是有效。
示例:受害站点frame busting 代码
1 | <script> |
攻击者
1 | <iframe scr= "http://www.victim.com/?v=<script>if"> |
XSS过滤器会把<script>
if 与站点内的frame busting代码的起始处匹配,接着会禁用受害站点的所有内嵌代码,包括frame busting代码。
Google chrome
内置与chrome的XSS审计器给了攻击者选择性的禁止特定代码块的能力。通过匹配所有指定的内嵌脚本,XSS审计器会禁用掉它。
这使框架页面特定的指向包含frame busting代码的代码块。XSS审计器也可用来攻击外部脚本,但过滤器只会禁用从不同来源加载的特定脚本
示例:
1 | if(top != self){ |
攻击者
1 | <iframe src:"http://www.victim.com/?v=if(top+!%3D+self)+%7B+top.location%3Dself.location%3b+%7D"> |
这里看到chrome XSS过滤器将会禁用frame busting脚本,但会离开页面操作的所有其他脚本。从结果来看,框架化的页面将会功能正确,并且此类攻击在chrome上会比IE8上面更为有效。
referrer 检查问题
一些站点允许它们的页面在本站上被框架。这通常使用检查document.referrer来实现,但是这样通常都会被不正确地使用。我们给出调查当中的一些例子。
示例1:考虑下面一段来自大型零售商的代码
1 | If( top.location !=location){ |
这个页面能够被拥有walmart.com.badgy.com域名的的攻击者框架化
示例2:如果正则表达式是错误的,这样的匹配可能是灾难性的。请看NY times的以下代码:
1 | If (window.self != window.top && |
由于正则表达式没有要求URL的开头,所以在URL中的任何匹配https://www.nytimes.com/
将允许被框架。攻击者所要做的就是将https://www.nytimes.com
加入到url参数集里就可以达到如图四所示的框架的效果。
需要注意的一点事referrer头部不会将https的流量转给http而是会被忽略掉。上述示例中,一个丢失的referrer可能导致错误的动作发生,因此,为了“frame frendly”限制无用的referre 头部的使用。
Referre and double framing
如果一个站点没有使用frame busting技术的话,允许特定站点框架话将会允许间接框架内容。一个有力的实例是myspace,它允许谷歌图片来框架内容,谷歌图片搜索不会做任何的frame busting工作,它的深度的搜索机制被认为是开放重定向或者开放框架重定向。为了能够使用谷歌图片来框架myspace内容,攻击者只需要简单地在子框架下搜索想要的内容。这种双框架允许任何第三方实体来框架内容。有大量的在搜索框中隐藏不希望被看到内容的方法,包括翻滚和安放顶部元素。
重写top.location
一些线代浏览器将location变量当作一个不变的属性然而,在ie7和safari4.0.4中location变量能够被重定义。
IE7
一旦页面重定义了,位子框架下尝试读取top.location的frame busting代码会通过读取另一域的本地变量而发4生安全违例。相似的,任何想要复制top.location的尝试都将失败。
示例:受害站点的frame busting 代码:
1 | If(top != self){ |
Safari 4.0.4
我们观察到虽然在大多数情况下location变量是定值,但当用户location配置器是通过defineSetter来定义的时候,location对象就会变成未定义的状态。框架页面只需简单地这样做:
1 | <script> |
现在任何试图读取或者导向框架位置的动作都会失效。
IE 限制域
数框架页面的frame busting代码都是基于javascript的,以此来检测框架和“破环”自身。如果javascript在子框架内容中被禁用,frame busting代码将不会运行。在IE中,受限域加载的内容会禁用javascript和cookie。
为了标记一个来自受限域的框架,页面会采用一个带有security=restricted的iframe标签。在早先的研究中我们了解到这个特性可以用来挫败frame busting代码
示例,攻击者:
1 | <iframe src="http://victim.com" security="restricted"></iframe> |
结果就是框架中的javascript代码被禁用,导致表二所示 的代码不能运行。对点击劫持来说这个方法很有局限性-因为没有cookie在子框架重传送,会话控制变得很困难。
沙箱属性
最近,浏览器开发商开始以iframe标志新的沙箱属性的形式来标准话IE的限制域特性。这个属性是由HTML5所指定的并且现在应用与chrome浏览器中;可被用来在限制域中禁用javascrip;然而 因为在子框架中传送了cookie,攻击者能够凭借此来劫持会话来完成攻击。
设计模式
Stone显示在框架页面重设计模式能够被开启(通过document.designMode),而后在顶部子域框架来禁用javascript。Cookie再次在子框架重分发,。设计模式已经在firefox和IE8中得到应用。
移动端站点
许多站点都在主页上提供可供选择的移动端界面,使用如m.example.com 或者 mobile.example.com,这些站点转发全部重要的功能子集,这些与他们的真实点击动作相关。
不幸的是许多站点在他们的主域中使用了frame busting技术但是在移动端页面并没有使用这项技术,事实上,在我们的调查中只有一家站点这么做。只有很少的网站实际上由用户代理自动呈现,使我们能够在所有浏览器中构建就像我们常规网站样的移动界面。更严重的问题是,许多站点不区分是否是来自移动端的流量,这就是说,如果你在www.example.com
上登陆的话你也同时登陆了mobile.example.com。这就能够使攻击者能够对移动端站点进行点击劫持攻击以此来控制整个站点。
指定站点攻击
虽然多数站点使用如前面所谈到的流行的frame busting技术,但是一些站点选择开发自身的frame busting技术,在这部分,我们将讨论一些在调查中发现的很有趣的防御手段,并且展示一些相关的技术来挫败他们。
黑暗中的一束光
Facebook的frame busting方法和流行的方法大不相同。它不是在自身框架外进行破坏,而是插入一个灰色的半透明div标签,这个标签包括了一个框架页面的所有内容,当用户点击div的任何一处,facebook就破坏框架。这个巧妙的方法允许内容被框架的同时,阻止了点击劫持攻击。以下是带漏洞的代码版本,我们已经报告给facebook。
1 | If(top!= self){ |
当被框架时,这段代码插入一个黑色的9999 *9999像素,50%透明的(0,0)处的div标签。因为所有出这个div之外的facebook内容都在框架之中,这个保护可以被载入足够大的框架挫败,由此整个框架的中心久位于黑色的div区域外。内容自然地流动到框架的中心并被直接显示给用户并且没有被黑色覆盖,框架代码如下,相应的页面如图5
1 | <body style=" overflow-x : hidden ; |
注意到scrollTo函数动态翻转滚动到frame的中心,这样内容出现得很清除。
域检查错误
USBank使用frame busting代码来检测referrer字段从而判断是否能够被框架化。工作代码如下:
1 | if(self != top ){ |
getDomain是一个用来返回URL中的域名信息,注意到任何包含USBank的都将被允许来框架页面,这完全不是开发者所希望的。举例来说,挪威的state house银行http://www.husbank.no
和莫斯科银行http://www.rusbannk.org
都可互相来被允许框架页面,因为两者的域名中都包含由字符串usbank
信任问题
Myspace.com 的framebusting代码:
1 | try{ |
代码被设计成允许myspace被谷歌图片所框架。然而谷歌图片谷歌图片没有frame busting,结果就是一个攻击者框架谷歌图片然后通过谷歌额图片来框架myspace。因为myspace接收到来自谷歌图片的referrer它并不会识图导出框架。结果如图六所示:
这个例子显示在frame busting的情景下,相互的信任关系会变得很危险。一个兄弟站点不使用frame busting会导致受信页面被攻击者框架化
安全地frame busting
现在我们将角度转到防御者的角度,讨论如何是一个占地那避免被框架化。首先我们回顾相关的用户端的额特点,然后给出一段有效抵御现有攻击的frame busting代码
x-frame-options
微软在IE8中为了抵抗点击劫持攻击特意引入了x-frame-options,这是一个HTTP响应报文中的报头,这个字段有两个不同的值:DENY 和SAMEORIGIN。当时用DENY时,IE8将会在请求站点的框架内容中进行渲染。如果使用的是SAMEORIGIN,IE只会在顶层浏览内容来源和包含指令内容来源不同时才会禁止该页面。
尽管这个机制很有效,但是它还是有三个主要的局限。
- 每页策略指定:该策略需要为每个页面指定,这可能使部署复杂化。为提供全面强制执行策略的能力,例如在登陆的时候,可以简化采用。
- 多域名问题:在目前的实现下不允许网站管理员提供允许框架网页的白名单,虽然白名单可能是危险的,但在某些情况下,管理员可能无法选择而至鞥你使用主域名。
- 代理:网络代理在添加,删除头部字段方面是臭名昭著的,如果一个网络代理剔除了x-frame-options字段,那网站将失去它的框架保护
x-frame-options已经被浏览器开发商迅速采用,出了firefox之外,每个最新版本的浏览器都使用了这个技术,danfirefox通过NoScript firefox插件提供此项功能。
但是在web方面采用较慢,最新一项调查显示,在top 10000中只有4个网站使用了它,这个结论是和我们的观察是一致的,我们观察到只有三个站点使用了这项技术。
内容安全策略
内容安全策略是一个Mozilla计划,该计划向web开发人员提供了一种网站上可指定互动内容的方法,它在firefox3.7中的部署已经被提上了日程。和x-frame-options一样,策略通过HTTP响应头传送,它比x-frame-options更为通用,允许网站的所有者指定其他类型的内容互动,例如:它允许网站将脚本限制在特定的来源。
Web管理者可直接使用指定的frame-ancestors指令来指定那些来源能够被嵌入到frame或者iframe标签中去。因此不像x-frame-options,web管理者可指定允许的第三方网站嵌入到iframe中。CSP从x-frame-options的另外一些局限性中吃到了苦头。它并不提供一个强制的全局策略,到现在这个策略尚处于测试阶段还未被网站所使用。
使用javascript
到此x-frame-options或其他基于浏览器的防护手段被广泛使用,这使web站点几乎没有选择的余地只能使用javascript来对抗点击劫持。图7中所示的是目前我们认为最有效安全的frame busting代码
页面加载时,样式表会隐藏页面上的所有内容。 如果禁用JavaScript,页面将保持为空。 类似地,如果页面被框架,它将保持空白,否则将尝试破坏框架。 如果frame busting代码被阻止,如通过挂起卸载事件或进行204冲洗攻击,页面将保持为空。 该脚本仅显示内容页面不在框架中运行的文档。 请注意,通过浏览器设置或NoScript禁用JavaScript的用户将无法使用该站点。 如果是这样的话,设计师可能想要有一个后备机制。
在我们的示例中,整个页面最初是不可见的,但是通过让子元素不可见,这种防御可能更加地细粒度。 这样,如果禁用JavaScript,则可以向用户显示一条消息。 但是,不建议激活超出该简单消息的任何功能子集。
我们通过注入代码到顶部页面手工测试了一些负载重的站点。 使用Firefox的YSlow和Chrome的Speed Tracer,我们无法识别渲染或加载时间的任何显着降低
我们强调,这个代码没有被证明是框架破坏的一种安全方法。 正如我们在整篇文章中所展示的,许多错误和漏洞可用于攻击者定位JavaScript frame busting,并且可能还有更多。 我们的代码片段可能已经很容易受到未知攻击的影响。但据我们所知,这是当前最好的方法。
相关工作
第一次提到透明iframe的负面影响是2002年Mozzila Firefox浏览器的错误报告[21]。术语“劫持”[10]是由Hansen和Grossman在2008年创造的。Clickjacking与网络钓鱼[9]不同,因为它不会诱使用户将机密凭证输入假冒网站。相反,用户必须将其凭据输入真实的站点以建立认证会话。攻击能够持续到用户的会话过期。劫持可以被认为是混淆代理的一个实例[5]。 “混淆代理”一词是1988年由哈迪创造的[11]。另一个网络上的混淆代理问题的例子是跨站点请求伪造[2]。网络密钥认证方案[6]在URL中使用不可预知的秘密,而不是cookie进行身份验证。这种方法可以减轻混淆代理的问题,如劫持和CSRF。用于点击劫持的实验客户端防御包括ClearClick [18]和ClickIDS [1]。这些防御还没有广泛部署,所以他们不能作为网站主要的防御。他们还介绍了陈旧网站的一些兼容性成本,这可能会妨碍浏览器厂商的采用。
结论
我们调查了top 500网站的frame busting的做法。 通过使用已知和新颖的攻击技术,我们发现我们遇到的所有劫持防御都可以以某种方式绕过。
许多攻击是通用的,可以用于攻击各种各样的站点。 我们发现使用有针对性的攻击可以击败具有高级劫持防御(如Facebook和MySpace)的站点。 在查看了可用的防御措施后,我们提出了一种基于JavaScript的防御方式,直到浏览器支持X-FRAME-OPTIONS等解决方案得到广泛部署。
本文链接: https://bano247.com/2021/11/03/点击劫持(ClickJacking)/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!