解決一起web 頁面被劫持的案例


 

 

  1. 現象

 

     江西客戶手機端連接wifi打開URL,頁面上顯示淘寶店鋪廣告,使用手機移動網絡打開正常,其他地區正常。

 

 

 

 

 二. 處理過程

  1. 初步分析:3g.club項目使用了CDN,目前只有江西異常,其他地區無異常,說明問題范圍僅在江西地區,根據業務人員反饋的問題現象,以及以往類似問題處理經驗,該問題原因是可能是頁面某個js被污染,導致污染的原因可能是dns解析被劫持
  2. 檢查江西dns對3gclub的解析情況:我們使用江西dns對3g.club進行解析,並讓客戶在本地ping 域名返回結果,檢查解析的IP是否是雲端CDN節點,發現我們解析的IP和客戶ping結果均正常,節點正確,排除dns解析被劫持原因
  3. 向雲端CDN技術反饋問題現象,協助排查問題
  4. 統計出現此問題的客戶端類型,發現手機自帶的瀏覽器和勻加速功能的瀏覽器均出現問題,排除第三方瀏覽器雲加速導致的問題;由於江西只有一家客戶,而且用的是電信網絡,所以暫時定位為出現問題的均是電信用戶
  5. 檢查江西節點上頁面文件,我們將請求江西節點返回的頁面、請求北京地區返回的頁面、請求內網服務器返回的頁面進行比較,發現頁面正常,排除了江西節點到源站之間鏈路原因,推測原因可能在客戶移動端到節點之間鏈路問題
  6. 由於手機沒有firbug,無法抓去頁面元素,我們試着使用客戶那邊同局域網內的電腦訪問URL,結果問題沒有復現。推測可能在劫持時候對request header 里User-Agent有判斷。最后使用firfox插件,修改request header里User Agent,模擬手機用戶請求,問題依然無法復現
  7. 我們試着讓客戶在url上加了參數進行訪問,發現頁面正常,去掉參數之后,依然有問題。將此結果反饋給CDN技術,協助排查。發現節點緩存住了頁面(默認是穿透CDN回源的),CDN技術清空緩存之后,讓客戶重新測試,發現問題依舊
  8. 最后我們使用博瑞移動端即使測試,復現了問題,拿到頁面源碼,查到原因是運營商機房去回上層有劫持,最后調整了聯系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<1){
$('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>

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM