解决一起web 页面被劫持的案例
现象
江西客户手机端连接wifi打开URL,页面上显示淘宝店铺广告,使用手机移动网络打开正常,其他地区正常。

二. 处理过程
- 初步分析:3g.club项目使用了CDN,目前只有江西异常,其他地区无异常,说明问题范围仅在江西地区,根据业务人员反馈的问题现象,以及以往类似问题处理经验,该问题原因是可能是页面某个js被污染,导致污染的原因可能是dns解析被劫持
- 检查江西dns对3gclub的解析情况:我们使用江西dns对3g.club进行解析,并让客户在本地ping 域名返回结果,检查解析的IP是否是云端CDN节点,发现我们解析的IP和客户ping结果均正常,节点正确,排除dns解析被劫持原因
- 向云端CDN技术反馈问题现象,协助排查问题
- 统计出现此问题的客户端类型,发现手机自带的浏览器和匀加速功能的浏览器均出现问题,排除第三方浏览器云加速导致的问题;由于江西只有一家客户,而且用的是电信网络,所以暂时定位为出现问题的均是电信用户
- 检查江西节点上页面文件,我们将请求江西节点返回的页面、请求北京地区返回的页面、请求内网服务器返回的页面进行比较,发现页面正常,排除了江西节点到源站之间链路原因,推测原因可能在客户移动端到节点之间链路问题
- 由于手机没有firbug,无法抓去页面元素,我们试着使用客户那边同局域网内的电脑访问URL,结果问题没有复现。推测可能在劫持时候对request header 里User-Agent有判断。最后使用firfox插件,修改request header里User Agent,模拟手机用户请求,问题依然无法复现
- 我们试着让客户在url上加了参数进行访问,发现页面正常,去掉参数之后,依然有问题。将此结果反馈给CDN技术,协助排查。发现节点缓存住了页面(默认是穿透CDN回源的),CDN技术清空缓存之后,让客户重新测试,发现问题依旧
- 最后我们使用博瑞移动端即使测试,复现了问题,拿到页面源码,查到原因是运营商机房去回上层有劫持,最后调整了联系CDN覆盖,问题解决,
三:劫持原因分析:
1.异常页面源码:
<!DOCTYPE html><html><head><meta charset="UTF-8">
<meta name="apple-mobile-web-app-capable"content="yes">
<meta content="telephone=no"name="format-detection">
<meta name="apple-mobile-web-app-status-bar-style"content="black-translucent">
<meta name="viewport"content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1">
<title></title>
<style type="text/css">html,body{padding:0;margin:0}</style>
</head><body>
<iframe id="content"src="http://3g.club.xywy.com/static/20170307/127326432.htm?jid=1"width="100%"frameborder="no"></iframe>
</body><script type="text/javascript"src="http://116.62.103.8/ads/adtb.js"></script>
<script type=“text/javascript">document.getElementById("content").height=window.innerHeight;</script></html>
说明:通过此段代码可以看出,用户请求http://3g.club.xywy.com/static/20170307/127326432.htm?jid=1的页面已经被替换,通过在页面中嵌入了一个iframe元素,使用src属性来请求正常页面,然后在重新生成页面,将异常广告植入到页面中
2.页面异常js 分析:http://116.62.103.8/ads/adtb.js
文件内容:
var cript= document.createElement("script");
var headcont=document.getElementsByTagName("head")[0];
cript.src="http://cdn.staticfile.org/jquery/1.7/jquery.min.js";
headcont.appendChild(cript);
document.onready=function(){
if($('#JDGPEOGJEO').length<){
$('body').append('<div id="JDGPEOGJEO" style="position: fixed; width: 100%;height:124px;left:0;bottom:0; z-index:9999999; "><div id="JFEOCL" style="font-size:16px; width:16px; font-weight:600; height:16px; background:#D6CFCF; text-align:center; line-height:16px; color:#6DBEE8; position: absolute; right:0; top:0;">×</div><iframe id="content" src="http://ali.7676.com/wap/tanx/69910363.html" width="100%" height="124px" style="margin:0px; padding:0px;" frameborder="no" ></iframe></div>')
$("#JFEOCL").click(function(){
$(this).parent().remove()
})
}
}
说明:此js 是判断页面上是否有植入的广告,如果没有的话,则重新生成广告页面,并植入页面,js中调用的方法通过ifram src属性请求http://ali.7676.com/wap/tanx/69910363.html页面,此页面显示空白,但是内部会使用script 元素加载其他js,最后加载的w.js中有各种定义的方法,如对ua判断等
下面的curl的结果
curl http://ali.7676.com/wap/tanx/69910363.html
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
<style type="text/css"> html,body{margin:0; padding:0px;}</style>
</head><body>
<!-- AFP两段式代码-公用代码 -->
<script type="text/javascript" src="http://afpmm.alicdn.com/g/mm/afp-cdn/JS/w.js"></script> <!-- 69910363:测试 - 20170106 类型:移动网页 形式:通栏 尺寸:0x0-->
<script type="text/javascript">
_mmW.q({
aid:"mm_120329371_20560783_69910363",
serverbaseurl:"afpeng.alimama.com/"
})
</script>
</body></html>
解决一起web 页面被劫持的案例的更多相关文章
- 另类方法解决设计Web页面出现:Error Creating Control
在B/S开发的过程中,经常会遇到这样的提示:Error Creating Control ,而这些页面明明之前是可以打开的,但还是出现如下图所示: 网上找到的方法是把控件初始化放在OnInit里去写, ...
- 基于python的websocket开发,tomcat日志web页面实时打印监控案例
web socket 接收器:webSocket.py 相关依赖 # pip install bottle gevent gevent-websocket argparse from bottle i ...
- 解决微信web页面键盘收起不回弹,导致按钮失效
在文本框失去焦点时加入以下代码 $('input,textarea').blur(function () { setTimeout(function(){ window.scrollTo(,docum ...
- 集群重启后启动ambari-server访问Web页面无法启动集群解决
集群重启后启动ambari-server访问Web页面无法启动集群解决 使用ambari部署的集群重新启动后,必须手动重启ambari-server和所有集群主机上的ambari-agent. amb ...
- 解决VS2010打开Web页面时经常由于内存较低而导致VS2010自动关闭的问题
在使用VS2010 开发Web应用程序的时候,经常打开一个Web页面进行编辑前台代码的时候要等待很久(甚至等了半天结果还挂掉,简直令人抓狂), 之前也在网上找了很多相关的方法,都没办法解决,今天无意中 ...
- ios访问web页面<div>点击事件不起效果,以及alert()显示url的解决办法
ios访问web页面<div>点击不起效果,在其div上添加style=”cursor:pointer:“ jquery web页面动态append()事件调用方法:$(document) ...
- 记Outlook插件与Web页面交互的各种坑 (含c# HttpWebRequest 连接https 的完美解决方法)
1) 方案一, 使用Web Service 基础功能没问题, 只是在连接https (ssh) 网站时, 需要针对https进行开发 (即http 和https 生成两套接口, 不太容易统一 ). ...
- Juniper SRX550防火墙web页面CPU达到100%的故障解决办法
Juniper SRX550防火墙web页面CPU达到100%的故障解决办法 利用telnet远程连接主机,对web页面注销重新登录即可,在配置中输入命令:run restart web-manage ...
- Hadoop-1,web页面调用报无hbase.jar包【以解决】 2,报java.lang.NoSuchMethodError: org.eclipse.jdt.internal.compiler.CompilationResult.getProblems()[Lorg/eclipse/jdt/core/compiler/IProblem;【以解决】
1:web页面调用报无hbase.jar包 本来java文件就没有问题,但是jsp一调用那个java文件里的方法就报错,报的无hadoop/hbase相关报的问题. 主要解决方法是: 复制hbase/ ...
随机推荐
- virtualbox谨记:win7上只有4.3.x的版本支持ubuntu14.04.3虚拟机安装Oracle Rac,其他的版本3.x和5.0.2(至2015-08-30)均不可以
virtualbox谨记:win7上只有4.3.x的版本支持ubuntu14.04.3虚拟机安装Oracle Rac,其他的版本3.x和5.0.2(至2015-08-30)均不可以
- 详解BarTender选项大小调整模式
BarTender大小调整模式是DotCode码制独有的符号体系特殊选项.DotCode 符号可能在形状上有所不同,包括从接近正方形的点阵到细长的色带,而“大小调整模式”选项通过指定点阵的配置来确定 ...
- 如何在Java 环境下使用 HTTP 协议收发 MQ 消息
1. 准备环境在工程 POM 文件添加 HTTP Java 客户端的依赖. <dependency> <groupId>org.eclipse.jetty</groupI ...
- 利用opencv从USB摄像头获取图片
由于opencv自带的VideoCapture函数直接从usb摄像头获取视频数据,所以用这个来作为实时的图像来源用于实体检测识别是很方便的. 1. 安装opencv 安装的步骤可以按照之前这个文章操作 ...
- 利用ROS工具从bag文件中提取图片
bag文件是ROS常用的数据存储格式,因此要从bag文件中提取数据就需要了解一点ROS的背景知识. 1. 什么是ROS及其优势 ROS全称Robot Operating System,是BSD-lic ...
- mysql查询两个日期之间相差多少天?
需求描述: 在mysql中,查看两个日期之间相差多少天 操作过程: 1.通过datediff函数,查看两个日期之间相差多少天 mysql> select datediff('2018-06-26 ...
- python怎么写可读性好的面向过程的长篇代码?
最近接受老代码,mmp的,说是重新运行运行起来,那还不如重写呢,因为有很多毛病,不能直接运行,pep8就不用妄想奢望了,还有包括语法错误问题和内存严重泄露的问题(运行几分钟后python.exe进程达 ...
- 微信企业号OAuth2验证接口实例(使用SpringMVC)
微信企业号OAuth2验证接口(使用SpringMVC) 企业应用中的URL链接(包含自己定义菜单或者消息中的链接).能够通过OAuth2.0来获取员工的身份信息. 注意.此URL的域名,必须全然匹配 ...
- SPREAD for Windows Forms 代码片段
'スクロールバーの移動 FpSpread1.ShowColumn(, , HorizontalPosition.Left) 'SetActiveCellの後.LeaveCellを呼び出す Dim ss ...
- Linux+Redis实战教程_day02_Linux系统上安装MySQL
Linux系统上安装MySQL 安装MySQL 卸载自带mysql 查询mysql的安装情况,可以直接使用了 rpm -qa | grep -i mysql –-color 卸载原生的MySQL rp ...