笨办法用js屏蔽被http劫持的浮动广告
最近发现网站经常在右下角弹出一个浮动广告,开始的时候以为只是浏览器的广告。
后来越来越多同事反映在家里不同浏览器也会出现广告。然后深入检查了下,发现网站竟然被劫持了。
然后百度了一大堆资料,什么http劫持、dns劫持、运营商劫持之类的,确定真的是中招了。看图:


真是偷梁换柱啊,被插入广告代码了。真是无良奸商,什么都做得出。
然并卵,最重要的解决办法是啥?然后把问题扔给了运维的同事。
最终结果是解决不了。没错,就是这么的坑爹。除非采用https。网上那些什么打电话、发信投诉之类的貌似没啥用。可能是运维太烂了。反正结果就是没结果。
然后,没办法啦。只能我们大前端自己想办法屏蔽啦。然后开启了研究劫持代码之旅,
......过程省略了800字寻找过程。
最终发现了,被劫持的广告会定义一个js全局变量_pushshowjs_ ,里面保存了一些劫持广告的相关信息,然后创建一个id为_embed_v3_dc的div放广告。并且每次都是一样的,不会有变化。
根据劫持广告的投放原理,最终使用了js屏蔽被劫持广告的方法。
具体代码如下:
;(function($,window,undefined){
    var needClear=false,
        timeout;
    if(window._pushshowjs_){
        console.log("adHttp");
        needClear=true;
    }
    window._pushshowjs_={};
    Object.freeze(window._pushshowjs_);//让对象只读, 防止属性被直接修改
    Object.defineProperty(window, '_pushshowjs_', {
        configurable: false,//防止属性被重新定义
        writable: false//防止属性被重新赋值
    });
    if(needClear){
        timeout=setInterval(function(){
            if($("#_embed_v3_dc").length>0){
                $("#_embed_v3_dc").remove();
                console.log("http清除");
                needClear=false;
                clearInterval(timeout);
            }
        },500);
        $(window).load(function(){
            if(needClear){
                setTimeout(function(){
                    clearInterval(timeout);
                    console.log("清除");
                },2000);
            }
        });
    }
}(jQuery,window));
代码不多,就不详细解析了(如果觉得代码有问题,望指正)。简单点说就是把劫持广告必须的全局js变量_pushshowjs_设定为不可被修改,只读。如果发现广告就清除。
放了代码,终于跟被劫持的广告说88了。
为什么说是笨办法?
因为这只是自欺欺人。其实劫持还是存在,并且被劫持了的js的加载顺序有可能会发生变化而导致错误,理想的办法还是要靠运维跟运营商去解决或使用https。
每个劫持的广告逻辑应该都差不多,但广告代码都会不同。所以我这个不一定会适用于其他的劫持广告。这只是一个思路,没办法之中的办法。
有大神有更好的解决办法,望指教。
笨办法用js屏蔽被http劫持的浮动广告的更多相关文章
- sql笨办法同步数据
		
Helpers.SqlHelper sqlHelper = new Helpers.SqlHelper("server=***;database=Cms;user id=sa;passwor ...
 - js屏蔽浏览器右键菜单,粘贴,复制,剪切,选中(转)
		
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
 - js屏蔽浏览器(IE和FireFox)的刷新和右键等功能
		
//一.js屏蔽浏览器(IE和FireFox)的刷新功能 document.onkeydown=function() { if ((window.event.keyCode==116)|| //屏蔽 ...
 - js  屏蔽浏览器事件汇总
		
//js 屏蔽 window.document.oncontextmenu = function () { event.returnValue = false; }//屏蔽鼠标右键 window.do ...
 - 5.js屏蔽方向键,兼容IE和firefox
		
document.onkeydown=function(e){ e=e||event; //屏蔽向左的方向键 if(e.keyCode==37){ alert('禁止向左的方向键!'); return ...
 - 4.js屏蔽浏览器鼠标右键菜单
		
document.oncontextmenu = function(){return false;} 参考链接:js 屏蔽浏览器事件汇总
 - JavaScript浮动广告代码,容纯DIV/CSS对联漂浮广告代码,兼容性非常好的js右下角与漂浮广告代码
		
基于JavaScript代码实现随机漂浮图片广告,javascript图片广告 在网上有很多这样的代码,不过未必符合W3C标准,因为在头部加上<!DOCTYPE html>类似标签之后,漂 ...
 - wordpress使用video.js与七牛云存储实现无广告视频分享应用
		
video.js是一款极受欢迎的基于HTML5的开源WEB视频播放器,其充分利用了HTML5的视频支持特性,可以实现全平台的无视频插件播放功能,对于现在流行的手机.PAD等移动智能终端有极佳的应用体验 ...
 - Js浮动广告效果实现
		
第一种 漂浮广告 不符合W3CJavaScript漂浮广告代码,很不错,代码精简,不过一次只有漂一个,复制就能用了.希望站长朋友喜欢. <html> <head> <ti ...
 
随机推荐
- Entity Framework入门教程:SQLite数据源访问
			
[环境安装] 可以通过NuGet直接搜索安装SQLite需要用到的组件 或者直接使用程序包管理器控制台 > Install-Package System.Data.SQLite 通过ADO.NE ...
 - 学习Java绝对要懂的,Java编程中最常用的几种排序算法!
			
今天给大家分享一下Java中几种常见的排序算法的Java代码 推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来! ,群里有免费的学习视频和项目给大家练手.大神有空时也 ...
 - Chapter 7. Design and Performance
			
本章将对MPEG4及H.264的实现细节进行讲解和比对. Motion Estimation 衡量运动估计的好坏有三种函数(第228页):MSE,MAE和SAE,其中由于SAE运算速度最快所以采用的最 ...
 - laravel blade模板介绍
			
第一步:首先写好模板 在sites下新建立一个app.blade.php文件 写入模板如: <!DOCTYPT html><html><head> <titl ...
 - 如何简单的实现新手引导之UGUI篇
			
一个完整的游戏项目肯定是要做新手引导的,而引导做的好坏可能会影响玩家的留存.那么怎么简单的实现个简有效的引导呢!先不说废话,先看看效果,这是一个基于UGUI做的一个简单的引导! 怎么样,看着是那么回事 ...
 - c#重起 普通路由器
			
using DotNet.Utilities;using System;using System.Collections.Generic;using System.Linq;using System. ...
 - Jmeter(十三)用Jmeter自带录制工具代理录制手机端应用脚本APP脚本
			
JM 菜单栏(即编辑下面的绿色按钮),Templates -->Select Template 选择 Recording -->create: 然后在工作台 (WorkBench)下面的H ...
 - Sass控制命令及函数知识整理
			
2017-07-07 20:17:17 最底部附结构图(实在是结构图太长了没办法) 2017-06-22 09:11:43 一.Sass的控制命令 1.@if语句 @if 指令是一个 SassSc ...
 - windows平台python 2.7环境编译安装zbar
			
最近一个项目需要识别二维码,找来找去找到了zbar和zxing,中间越过无数坑,总算基本上弄明白,分享出来给大家. 一.zbar官方介绍 ZBar 是款桌面电脑用条形码/二维码扫描工具,支持摄像头及图 ...
 - Java IO设计模式(装饰模式与适配器模式)
			
01. 装饰模式 1. 定义 Decorator装饰器,就是动态地给一个对象添加一些额外的职责,动态扩展,和下面继承(静态扩展)的比较.因此,装饰器模式具有如下的特征: 它必须持有一个被装饰的对象(作 ...