网页劫持

34 篇文章 0 订阅
3 篇文章 0 订阅

    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的一些总结(原理+检测+防御)

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值