宝哥软件园

用js屏蔽被http劫持的浮动广告的实现方法

编辑:宝哥软件园 来源:互联网 时间:2021-09-04

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

后来越来越多的同事报道,家里不同浏览器出现了广告。然后,经过深入检查,发现网站被劫持了。

然后百度发现了很多信息,比如http劫持、dns劫持、运营商劫持等。并证实这确实是一个骗局。看图片:

真是敲竹杠!它被插入到广告代码中。真是肆无忌惮的奸商,无所不能。

解决这个问题最重要的办法是什么?然后我把这个问题抛给了运维的同事。

最终结果无法解决。是的,这就是诀窍。除非使用https。在网上打电话,发信件,发投诉,好像都没用。可能是操作维护太糟糕了。反正结果是没有结果的。

那么,就没有出路了。我们只能在大前端找到保护自己的方法。然后开始了研究劫持代码的旅程,

.过程省略了800字的搜索过程。

最后发现被劫持的广告会定义一个js全局变量_pushshowjs_,保存一些被劫持广告的信息,然后用id _embed_v3_dc创建一个div来显示广告。而且每次都一样,不会变。

根据被劫持广告的投放原则,js最终被用来屏蔽被劫持的广告。

具体代码如下:

;(函数($,window,undefined){ var needClear=false,超时;if(窗口。_ pushshowjs _){ console . log(' AdhTTp ');needClear=true}窗口。_ pushshowjs _={ };对象。冻结(窗口。_ pushshowjs _);//将对象设为只读,防止属性被直接修改。object.defineproperty (window,' _ pushshowjs _ ',{可配置: false,//防止属性被重新定义。writable : false////防止属性被重新分配});if(NeedClear){ time out=setInterval(function(){ if($(' # _ embed _ v3 _ DC '). length 0){ $(' # _ embed _ v3 _ DC ')。移除();Console.log('http清理');needClear=falseclearInterval(超时);} },500);$(窗口)。load(function(){ if(needClear){ setTimeout(function(){ clearInterval(超时));console . log(' clear ');},2000);} });}}(jQuery,window));代码不多就不详细分析了(代码有问题请指正)。简单地说,劫持广告所必需的全局js变量_pushshowjs_被设置为不可修改和只读。如果找到广告,请清除它。

放代码,最后告诉被劫持的广告88。

为什么这么蠢?

因为这只是自欺欺人。事实上,劫持仍然存在,被劫持js的加载顺序可能会改变,导致错误。理想的解决方案是依靠运维和运营商来解决或者使用https。

每个被劫持的广告逻辑应该是相似的,但广告代码会有所不同。所以我不一定把这个应用到其他劫持广告上。这只是一种思维方式,一种无中生有的方式。

有大神有更好的解决办法。我希望你能给我一些建议。

以上用js拦截被http劫持的浮动广告的实现方法,都是边肖分享给大家的内容,希望能给大家一个参考和支持。

更多资讯
游戏推荐
更多+