让人恼火的经历——手机H5网页被注入广告

你的网站是否在尾部出现了让人恼火的广告?javascript

此次我算是遇到了这些流氓的广告。那么就让咱们一步步攻克这些恼火的广告吧。css

 

问题描述

image

某一天下午开始,咱们制做的网站就开始被各类广告注入,相似上图这种。前端

image还有在网页右下角出现的广告java

发现问题的有:一、手机端网页最为广泛,所有都是底部有广告。(app内嵌H5网页广告最多)jquery

二、网页端网页极少出现,出现的均为运营商的广告。chrome

三、不管有无登陆,即便在须要登陆才能被访问到的页面也有广告。express

四、广告时有时无,刷新一遍页面以后基本不出现半个小时左右。centos

五、广告钓鱼连接不少。浏览器

 

问题分析

首先分析广告来源:tomcat

通过各方面的查找,肯定了如下一些可能出现问题的来源。

一、DNS劫持,域名解析方面出现问题。

二、js注入,页面未对特殊字符限制。

三、iframe注入,页面被拦截以后加入了iframe标签,或者利用js注入后加载了广告的iframe标签。

四、服务器被黑。

 

对于广告自己来讲,因为广告出现的时间随机,出现的页面随机,出现的广告随机,等特色,捕捉问题难度提升了。

由于对于广告自己来讲,你不知道你使用的解决方法是否能立刻起到效果。因此也增长了解决的难度。

而后分析一下实际出现的代码。

我把出现问题的页面保存了下来进行分析。

获得了如下的代码

image

我除去了我原本页面的代码。剩下的就是js加载的代码。

很明显,出现了两个问题。

一、页面底部出现了iframe标签,本不应存在的。

二、页面被加载了广告的js,原本确定没有。

三、重复加载了一次个人js而且命名遭到修改simpleTip_wap.js(1)能够看出。

其余中招的页面也是一样的道理,这里就不贴了。

下面用chrome查看页面加载状况。

image

从加载的过程很明显能够看出,是js注入,经过伪造了一个js而后我加载了别人的,别人再加载了个人,别人再加载广告。致使页面自己不会出现问题,不影响正常使用,可是就是会出现广告了。

 

问题解决

做为毫无网站安全经验的小白。第一件作的事情确定是查阅各类资料,寻找解决的方案。

先说明一下环境,由于本人是java开发,使用的是jsp页面。而后服务器使用的是centos7。容器tomcat。页面只有jquery和一个简单的提示js。简单的css。

对于网站安全来讲,以前了解的都是有关业务的,此次第一次是这种无赖的页面。

下面列举我寻找到的各类解决方案,我都一个个作了尝试。请看到最后再开始写代码

一、meta禁用iframe

使用<meta http-equiv="X-Frame-Options" content="DENY">

听说能够禁用iframe因而拿来试试。

 

二、js禁用iframe

<script type="text/javascript">
        if(top.location!=self.location)top.location=self.location;     
    </script>

在页面中使用相似以下的js,有不少的版本,我就列举其中一个。

 

三、css让iframe显示为空白

<style type="text/css">
iframe{v:expression(this.src='about:blank',this.outerHTML='');}
</style>

毕竟不是前端,因此css懂得很少,也就拷贝过来试一试。

 

四、在jsp页面头部加入协议

response.setHeader("X-Frame-Options", "SAMEORIGIN");

也是为了禁用iframe

 

五、本身手写js定时器循环检测页面iframe标签,并置空

失败了!你别尝试了!

-----------------------------------------------------上面是从iframe标签入手,下面是从js方向入手

六、使用js定时程序不停的清楚页面尾部标签

</body>
<div id="bottom"></div>

<script type="text/javascript">
    setInterval(clearAd,1000);
    function clearAd()
    {
        $("#bottom").nextAll().remove();
    }
    </script>

有效,可是广告会有一闪而过,若是把定时时间调快对于页面来讲压力贼大

 

七、调整js名字

由于发广告的人重命名了个人js名字,我认为多是由于本身的js名字被捕捉到了。

因而重命名了js的名字。

 

八、调整js位置

由于个人js写在了页面底部为了页面加载的速度,而广告在底部,我就想会不会是。

因此我将js调整到了head标签中。

 

-------------------------------------下面是从服务器和dns角度考虑的

九、更换了dns解析服务器

由于我发现这个页面放到别的服务器并不出现广告,或许是dns的问题,换成了官方的域名解析服务器。

 

十、不少人看到这里确定已经看不下去了,老哥说了这么多,可是你没说结果啊!上面的方法到底行不行啊!

而后我要崩溃的告诉你,以上方法均不奏效,或者说效果很差。广告依旧猖狂。

最后我祭出了个人杀招,也就是最终的解决方案10,HTTPS大法

 

自从网站加上了https以后再也就没有出现过广告了。

而后我解释一下,为何我要罗列一下上面的解决方案,一个是让别人不要走弯路了,一个是由于或许这个方法对我这个广告没用,可是对于别人是有用的。我只能过广告那么多种类,我也真的不肯定。

 

为何

那么为何上面9种方法不行呢?我试着乱分析一下。

一、iframe标签法,我尝试直接把iframe标签删除以后发现广告依旧存在,也就是说广告并不是都在iframe里面。

二、css方法,js方法。广告的js加载都是在我本身的js、css加载完成以后再运行他的,因此咱们没有办法捕获到他生成的iframe或者生成的js

三、dns方法,相同的域名解析服务器,一个有广告,一个没有,问题应该不出如今dns上面。

为何https行了呢?

加密以后网页没有办法被篡改了。。。

有什么弊端吗?

好的证书要钱。

很差的证书要命(浏览器不信任)

 

 

PS:本人技术有限,若是朋友你遇到一样的问题,若是有什么简单有效的方法,很是但愿能在评论中指出。么么。

相关文章
相关标签/搜索