一个浮动广告的投放原理和劫持广告逻辑(一)

优采云 发布时间: 2021-08-11 21:07

  一个浮动广告的投放原理和劫持广告逻辑(一)

  我最近发现网站经常在右下角弹出一个浮动广告。起初,我以为这只是一个浏览器广告。

  后来越来越多的同事反映,家里的不同浏览器上都出现了广告。然后深入查看,发现网站被劫持了。

  然后百度得到了很多信息,比如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。

  每个被劫持的广告的逻辑应该是一样的,只是广告代码会有所不同。所以我的可能不适用于其他劫持广告。这只是一种思路,没有出路。

  大神们有更好的解决办法。希望大家多多指教。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线