新人开车——点击劫持

一、什么是点击劫持

  点击劫持是一种视觉上的欺骗手段。攻击者使用一个透明的、不可见的iframe,覆盖在一个网页上,然后诱使用户在该网页上进行操作,此时用户将在不知情的情况下点击透明的iframe页面。通过调整iframe页面的位置,可以诱使用户恰好点击在iframe页面的一些功能性按钮上。

  其关键作用的代码:

    iframe{

        900px;

        height:250px;

        position:absolute;

        top:-195px;

        left:-740px;

        z-index:2;

        -moz-opacity:0;

        opacity:0;

        filter:alpha(opacity=0);

      }

  通过控制iframe的长、宽,以及调整top、left的位置,可以把iframe页面内的任意部分覆盖到任何地方。同时设置iframe的position为absolute,并将z-index的值设置为最大,以达到

让iframe处于页面的最上层。最后,再通过设置opacity来控制iframe页面的透明程度,值为0是完全不可见的。

  点击劫持与CSRF攻击有异曲同工之妙,都是在用户不知情的情况下诱使用户完成一些工作。但是在CSRF攻击的过程中,如果出现用户交互的页面,则攻击可能会无法顺利完成。与之相反的是,点击劫持没有这个顾虑,它利用的就是与用户产生交互的页面

二、点击劫持案例

  1、Flash点击劫持

  2、图片覆盖攻击

  3、拖拽劫持与数据窃取

  4、手机触屏劫持

三、防御点击劫持

  传统的方式一般是禁止跨域的iframe来防范。

  1、frame busting

    通常可以写一段JS代码,以禁止iframe的嵌套。

    比如如下代码:

      if ( top.location != location ){

                  top.location=self.location;

                  }

  但是这种方式也存在缺陷。由于它是JS写的,控制能力并不是特别强,因此有许多方法可以绕过。

  比如针对parent.location的iframe busting,就可以采用嵌套多个iframe的方法绕过。

    if ( top.location != self.location){

                  parent.location = self.location;

                  }

绕过方式:

    Attacker top frame:

    <iframe src="attacker2.html">

    Attacker sub-frame:

    <iframe src="http://www.victim.com">

此外,像HTML5中iframe的sandbox属性,IE中iframe的security属性等,都可以限制iframe页面中的JS脚本执行,从而可以使得frame busting失效。

  2、X-Frame-Options

  由于上面的防御方式容易被绕过,所以一个比较好的方案是使用一个HTTP头——X-Frame-Options。

  X-Frame-Options可以说是为了解决点击劫持而产生的。

  有三个可选的值:

    deny

    sameorigin

    allow-from origin

    当值为deny时,浏览器会拒绝当前页面加载任何frame页面;

    若值为sameorigin,则frame页面的地址只能为同源于域名下的页面;

    若值为allow-from origin,则可以定义允许frame 加载的页面地址。

四、总结

  点解劫持相对于xss与csrf来说,因为需要诱使用户与页面产生交互行为,因此实施攻击的成本更高,在网络犯罪中比较少见。但是点击劫持在未来任然有可能被攻击者

利用在钓鱼、欺诈和广告作弊等方面,不可不察。

原文地址:https://www.cnblogs.com/hdsec/p/8427785.html