让人恼火的经历——手机H5网页被注入广告
你的网站是否在尾部出现了让人恼火的广告?
这次我算是遇到了这些流氓的广告。那么就让我们一步步攻克这些恼火的广告吧。
问题描述
某一天下午开始,我们制作的网站就开始被各种广告注入,类似上图这种。
还有在网页右下角出现的广告
发现问题的有:1、手机端网页最为普遍,全部都是底部有广告。(app内嵌H5网页广告最多)
2、网页端网页极少出现,出现的均为运营商的广告。
3、无论有无登录,即使在需要登录才能被访问到的页面也有广告。
4、广告时有时无,刷新一遍页面之后基本不出现半个小时左右。
5、广告钓鱼链接很多。
问题分析
首先分析广告来源:
经过各方面的查找,确定了以下一些可能出现问题的来源。
1、DNS劫持,域名解析方面出现问题。
2、js注入,页面未对特殊字符限制。
3、ifream注入,页面被拦截之后加入了ifream标签,或者利用js注入后加载了广告的ifream标签。
4、服务器被黑。
对于广告本身来说,由于广告出现的时间随机,出现的页面随机,出现的广告随机,等特点,捕捉问题难度提高了。
因为对于广告本身来说,你不知道你使用的解决方法是否能马上起到效果。所以也增加了解决的难度。
然后分析一下实际出现的代码。
我把出现问题的页面保存了下来进行分析。
得到了以下的代码
我除去了我本来页面的代码。剩下的就是js加载的代码。
很明显,出现了两个问题。
1、页面底部出现了iframe标签,本不该存在的。
2、页面被加载了广告的js,本来肯定没有。
3、重复加载了一次我的js并且命名遭到修改simpleTip_wap.js(1)可以看出。
其他中招的页面也是同样的道理,这里就不贴了。
下面用chrome查看页面加载情况。
从加载的过程很明显可以看出,是js注入,通过伪造了一个js然后我加载了别人的,别人再加载了我的,别人再加载广告。导致页面本身不会出现问题,不影响正常使用,但是就是会出现广告了。
问题解决
作为毫无网站安全经验的小白。第一件做的事情肯定是查阅各种资料,寻找解决的方案。
先说明一下环境,因为本人是java开发,使用的是jsp页面。然后服务器使用的是centos7。容器tomcat。页面只有jquery和一个简单的提示js。简单的css。
对于网站安全来说,之前了解的都是有关业务的,这次第一次是这种无赖的页面。
下面列举我寻找到的各种解决方案,我都一个个做了尝试。请看到最后再开始写代码
1、meta禁用ifream
使用<meta http-equiv="X-Frame-Options" content="DENY">
据说可以禁用ifream于是拿来试试。
2、js禁用ifream
<script type="text/javascript">
if(top.location!=self.location)top.location=self.location;
</script>
在页面中使用类似如下的js,有很多的版本,我就列举其中一个。
3、css让ifream显示为空白
<style type="text/css">
iframe{v:expression(this.src='about:blank',this.outerHTML='');}
</style>
毕竟不是前端,所以css懂得不多,也就拷贝过来试一试。
4、在jsp页面头部加入协议
response.setHeader("X-Frame-Options", "SAMEORIGIN");
也是为了禁用ifream
5、自己手写js定时器循环检测页面ifream标签,并置空
失败了!你别尝试了!
-----------------------------------------------------上面是从ifream标签入手,下面是从js方向入手
6、使用js定时程序不停的清楚页面尾部标签
</body>
<div id="bottom"></div>
<script type="text/javascript">
setInterval(clearAd,1000);
function clearAd()
{
$("#bottom").nextAll().remove();
}
</script>
有效,但是广告会有一闪而过,如果把定时时间调快对于页面来说压力贼大
7、调整js名字
因为发广告的人重命名了我的js名字,我认为可能是因为自己的js名字被捕捉到了。
于是重命名了js的名字。
8、调整js位置
因为我的js写在了页面底部为了页面加载的速度,而广告在底部,我就想会不会是。
所以我将js调整到了head标签中。
-------------------------------------下面是从服务器和dns角度考虑的
9、更换了dns解析服务器
因为我发现这个页面放到别的服务器并不出现广告,或许是dns的问题,换成了官方的域名解析服务器。
10、很多人看到这里肯定已经看不下去了,老哥说了这么多,但是你没说结果啊!上面的方法到底行不行啊!
然后我要崩溃的告诉你,以上方法均不奏效,或者说效果不好。广告依旧猖狂。
最后我祭出了我的杀招,也就是最终的解决方案10,HTTPS大法
自从网站加上了https之后再也就没有出现过广告了。
然后我解释一下,为什么我要罗列一下上面的解决方案,一个是让别人不要走弯路了,一个是因为或许这个方法对我这个广告没用,但是对于别人是有用的。我只能过广告那么多种类,我也真的不确定。
为什么
那么为什么上面9种方法不行呢?我试着乱分析一下。
1、ifream标签法,我尝试直接把ifream标签删除之后发现广告依旧存在,也就是说广告并非都在ifream里面。
2、css方法,js方法。广告的js加载都是在我自己的js、css加载完成之后再运行他的,所以我们没有办法捕获到他生成的ifream或者生成的js
3、dns方法,相同的域名解析服务器,一个有广告,一个没有,问题应该不出现在dns上面。
为什么https行了呢?
加密之后网页没有办法被篡改了。。。
有什么弊端吗?
好的证书要钱。
不好的证书要命(浏览器不信任)
PS:本人技术有限,如果朋友你遇到同样的问题,如果有什么简单有效的方法,非常希望能在评论中指出。么么。
让人恼火的经历——手机H5网页被注入广告的更多相关文章
- xpose修改手机imei码,注入广告
何为hook Hook英文翻译过来就是“钩子”的意思,那我们在什么时候使用这个“钩子”呢? 我们知道,在Android操作系统中系统维护着自己的一套事件分发机制.应用程序,包括应用触发事件和后台逻 ...
- 【转】微信公众号h5网页被嵌入广告 不知道什么原因
这个是因为http劫持导致的.HTTP劫持是在使用者与其目的网络服务所建立的专用数据通道中,监视特定数据信息,提示当满足设定的条件时,就会在正常的数据流中插入精心设计的网络数据报文,目的是让用户端程序 ...
- 用Opera Mobile调试手机版网页【转】
注意:新版本的opera已经采用webkit内核,没有dragonfly了. 要下载12版的http://get.geo.opera.com/pub/opera/win/1216/int/Opera_ ...
- H5网页适配 iPhoneX,就是这么简单
iPhoneX 取消了物理按键,改成底部小黑条,这一改动导致网页出现了比较尴尬的屏幕适配问题.对于网页而言,顶部(刘海部位)的适配问题浏览器已经做了处理,所以我们只需要关注底部与小黑条的适配问题即可( ...
- 如何将h5网页改成微信网页
1.如何将h5网页改成微信网页 1.设置安全域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”. 备注:登录后可在“开发者中心”查看对 ...
- chrome调试微信,app中H5网页的方法!
调试微信,app中H5网页大概有如下几个方法: (1).我们可以直接把网页的url放在chrome浏览器中进行调试.(不涉及微信登录) (2).我们可以把网页的url放在微信开发者工具中进行调试. ...
- Android原生同步登录状态到H5网页避免二次登录
本文解决的问题是目前流行的 Android/IOS 原生应用内嵌 WebView 网页时,原生与H5页面登录状态的同步. 大多数混合开发应用的登录都是在原生页面中,这就牵扯到一个问题,如何把登录状态传 ...
- 手机H5 web调试利器——WEINRE (WEb INspector REmote)
手机H5 web调试利器--WEINRE (WEb INspector REmote) 调试移动端页面,优先选择使用chrome浏览器调试,如果是hybrid形式的页面,可以使用chrome提供的ch ...
- Chrome模拟手机浏览网页
用Chrome模拟手机浏览网页,只需要编辑一个命令就可以实现 C:\Users\xxx\AppData\Local\Google\Chrome\Application\chrome.exe --use ...
随机推荐
- Omi架构与React Fiber
原文链接-https://github.com/AlloyTeam/omi/tree/master/tutorial 写在前面 Omi框架在架构设计的时候就决定把update的控制权交给了开发者,视灵 ...
- 从今天开始学习Java了
//今天第一天学习了Java的起源兴起和用途,Java的特点和优势,又重新练习了hello world, public class Hello{ public static void main(Str ...
- 老李分享:HTTP协议之请求和响应
老李分享:HTTP协议之请求和响应 HTTP请求头详解: GET http://www.foo.com/ HTTP/1.1 GET是请求方式,请求方式有GET/POST http://www.fo ...
- table切换
// 自己加载正确路径的jQ <!doctype html> <html><head><meta charset="utf-8">& ...
- Bootstrap基础学习(二)—表单
一.表单 1.基本格式 <!-- 基本格式 --> <form> <div class="form-group"> <label>姓 ...
- OpenDigg安卓开源项目月报201704
由OpenDigg 出品的安卓开源项目月报第一期来啦.我们的安卓开源月报集合了OpenDigg一个月来新收录的优质安卓开源项目,方便安卓开发人员便捷的找到自己需要的项目工具. DiscreteScro ...
- iOS图片填充UIImageView(contentMode)
本文主要形象的介绍一下UIView的contentMode属性: 核心代码 [self.prp_imageView setContentMode:UIViewContentModeScaleAspec ...
- C#---------------继承和多态初步
继承:在程序中,如果一个类A:类B,这种机制就是继承. 子类可以继承父类的所有内容(成员)吗? 解析: 1.私有成员(属性和方法) 2.构造函数 3.final修饰过的方法,子类不能进行重写 3.访问 ...
- Nginx配置同一个域名同时支持http与https两种方式访问
Nginx配置同一个域名http与https两种方式都可访问,证书是阿里云上免费申请的 server{listen 80;listen 443 ssl;ssl on;server_name 域名;in ...
- .exe简单的更新软件demo
百度网盘源码加文件:http://pan.baidu.com/s/1qYe2Vgg 功能:通过网站更新用户的软件,需要联网,也可以通过本地网站更新局域网用户软件. 根本实现:1.一个网站(本地就可以) ...