网页劫持

    web前端安全除了平常的XSS、CSRF外还存在一种安全问题就是网页劫持。所谓的网页劫持就是非法的网页被修改拦截了。来看下面的具体解释。

什么是网页劫持:

       使用HTTP请求请求一个网站页面的时候,网络运营商会在正常的数据流中插入精心设计的网络数据报文,让客户端(通常是浏览器)展示“错误”的数据,通常是一些弹窗,宣传性广告或者直接显示某网站的内容。


分类

    I、 跳转型劫持 :用户输入地址A,但是跳转到地址B

    II、 注入型劫持 :过在正常的网页中注入广告代码(js、iframe等),实现页面弹窗提醒或者底部广告等。

         1),注入js类劫持:在正常的页面注入js代码实现劫持。

         2),iframe类劫持:将正常网页嵌套iframe或者页面增加iframe。

         3),篡改页面类劫持:正常页面出现多余的劫持网页标签,导致页面整体大小发生变化。

  

防御

    1.  跳转型劫持,若用单纯靠Web页面进行检测比较困难

    2.  注入JS类:

          1) 改写document.write方法

          2) 遍历页面script标签,给外链JS增加白名单,不在白名单内js外链都上报

    3.iframe类:

          比较window.self 和window.top 或  比较parent 和 window,同时可增加白名单

          获取正确地址

           function getCorrectUrl() {

               var url ; 

                if(parent != window) {

                    try   {

                       url = parent.location.href;

                    }catch(){ 

                        url = document.referrer

                    }

                }

            }

     4.特殊方式

        类似电信捏造在白名单内的js URL和篡改页面内容的,我们用上面提到的方法检测不到这些信息,如果是在APP内,可以做的事情就比较多了,除了上面之外,还可以比较页面的 content-length。

    script内核心代码如下:

      function hiJackSniffer ()  

      var files = $ . toArray ( D . querySelectorAll ( 'script[src]' ));

      var arr =[];

      for ( var i = 0 , len = files . length ; i < len ; i ++){

        files [ i ]. src && arr . push ( files [ i ]. src );

          }

      if ( arr . length ){  

        return sendImg ( arr , 1 );

           }

      arr = getParentUrl ();

        if ( arr && arr . length ){   //被嵌入iframe

         return sendImg ([ arr ], 2 );

      }

       if ( D . documentElement . outerHTML . length > 4e3 ){

          var tmp ={};

          var headjs = $ . toArray ( D . head . querySelectorAll ( 'script' ));

         var unknownCode =[];

          if ( headjs . length ){

               unknownCode = unknownCode . concat ( headjs . map ( function ( v ){  

           return v . innerHTML ;

                 }). filter ( function ( v ){

            return !! v ;

          }));

         }

        var body = $ . toArray ( D . body . querySelectorAll ( '*' ));

         if ( body . length > 1 ){

           unknownCode = unknownCode . concat ( body . map ( function ( v )  

                    return v . outerHTML . split ( '\n' ). join ( '' )

                }). filter ( function ( str ){

                if ( /^<script id="b">/ . test ( str )){

                      return false ;

                }

            return true ;

           }));

          }

            return sendImg ( unknownCode , 3 );

             }

           sendImg ([], 0 );

        }


漏洞挖掘

   1)目标的HTTP响应头是否设置好了X-Frame-Options字段

        确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击

        DENY :标示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许

        sameorigin : 表示该页面可以在相同域名页面的 frame 中展示。

        allow-from uri :表示该页面可以在指定来源的 frame 中展示。

  

   2)目标是否有javascript的Frame Busting机制

   3)尝试用iframe嵌入网站

参考资料:

   XSS跨站脚步攻击及防范

   JavaScript防http劫持与XSS

   XSS的一些总结(原理+检测+防御)

   流量劫持 —— 浮层登录框的隐患


本文链接:https://my.lmcjl.com/post/12013.html

展开阅读全文

4 评论

留下您的评论.