前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >前端安全问题之点击劫持

前端安全问题之点击劫持

作者头像
前端知知
发布2022-09-29 19:14:41
9410
发布2022-09-29 19:14:41
举报
文章被收录于专栏:前端知知前端知知

漏洞定义

点击劫持也可以称 UI 覆盖攻击。是一种视觉上的欺骗手段,攻击者通过使用一个透明的iframe,覆盖在一个网页上,然后诱使用户在该页面上进行操作,通过调整iframe页面的位置,可以使得伪造的页面恰好和iframe里受害页面里一些功能重合(按钮),以达到窃取用户信息或者劫持用户操作的目的。如下示例(图片来自网络,如有侵权,请留言删除):

用户点击按钮网页a.html click to win 实际是点击另一个网页b.html 的confirm按钮,从而产生点击劫持。

漏洞原理

那如何如能做到漏洞攻击呢,其关键可能是两点:

使用iframe 嵌套目标网页: 使用iframe 嵌套要攻击的目标网页,如上个例子的b.html,并且通过position 等属性使得其z-index 高于Click to win按钮;当点击Click to win按钮时,实际是点击a.html中的内容。

隐藏目标网页:点击劫持的另一个核心是当我们点击某个网页时,是完全不能发现是点击的另一个网页。实现的方式是使用css 相关属性,可以用下面的属性来实现透明:

  • visibility: hidden
  • opacity: 0

一个简单的攻击网页如下:

代码语言:javascript
复制
//a.html
<body>
    <button class="btn1">Click to win</button>
    <iframe src="xxxb.html" width="1300" height="700"  style="opacity: 0"/>
  
</iframe>
</body>

防御方式

对于点击劫持,其防御思路之一就是使得网页不能被iframe 嵌套,可以通过设置X-FRAME-OPTIONS响应头来实现。X-FRAME-OPTIONS的属性如下:

(1)DENY:不能被嵌入到任何iframe或frame中。

(2)SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中。

(3)ALLOW-FROM URL:只能被嵌入到指定域名的框架中

比如以koa 框架为例,可以做如下设置:

代码语言:javascript
复制
ctx.set("X-frame-options", "DENY");

在设置之后,页面会出现如下的提示:

另外一种方式判定如果是嵌套,直接进行页面跳转。可以通过top 对象和window对象是否相等来判定。

代码语言:javascript
复制
if( window != top ) {
 top.location = window.location ;
}

总结

本文主要介绍了前端安全问题:点击劫持,作为一种UI 劫持,其特点是利用iframe 来嵌套目标网页,并且使iframe 的z-index比其他dom 元素要大的;要防御点击劫持,可以通过设置 `X-FRAME-OPTIONS` 响应头,也可判定页面在iframe 中时进行跳转。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端知知 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 漏洞原理
  • 防御方式
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档