佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > 簡(jiǎn)單分析網(wǎng)站流量劫持防范措施(圖文)

簡(jiǎn)單分析網(wǎng)站流量劫持防范措施(圖文)

熱門標(biāo)簽:阿里云 Win7旗艦版 鐵路電話系統(tǒng) 解決方案 電銷機(jī)器人 Linux服務(wù)器 蘋果 科大訊飛語音識(shí)別系統(tǒng)

  前幾天上網(wǎng)打開163首頁(yè)時(shí),發(fā)現(xiàn)頁(yè)面底部莫名其妙的出現(xiàn)一個(gè)邊框。這在以前可是未曾有過的,而且以后也絕不可能會(huì)有這么丑陋的設(shè)計(jì)。

  趨于好奇心,立刻在邊框上點(diǎn)了右鍵審查元素。尼瑪,不看不知道,網(wǎng)易首頁(yè)的HTML何時(shí)變得這么劣質(zhì)了?

  沒有doctype聲明,連title元素都沒有。script還是language=JScript風(fēng)格,這得追溯到多少個(gè)世紀(jì)前了~ 最劣質(zhì)的是框架居然還是frameset>元素。。。

  不用說,這顯然不是網(wǎng)易的頁(yè)面。頁(yè)面里的ad字樣,早已深深的出買了它,這就是個(gè)廣告頁(yè)面!

  話說生在天朝,對(duì)于各種劫持早已司空見慣。

  在網(wǎng)頁(yè)里劫持廣告,油價(jià)2塊錢一升的時(shí)代就有了,過了世界末日依舊存在,說明其中的利益是巨大的。

  不用計(jì)算,用手指估算下就知道了。我朝有好幾億電腦和手機(jī)用戶,每天有無數(shù)個(gè)網(wǎng)頁(yè)被打開。哪怕在1%的網(wǎng)頁(yè)里插一個(gè)廣告,都有數(shù)百上千萬次的展示數(shù)量,其中的商機(jī)不言而喻。。。

  盡管對(duì)此有些無奈,但只要插入的廣告不影響正常上網(wǎng),也沒什么意見。如果水平夠高,完全可以偽裝成頁(yè)面里本來的廣告,至少形式上一樣,看不出任何的破綻。這樣非但不BS,反倒會(huì)有些佩服。

  然而,至今見過的各種廣告劫持代碼,簡(jiǎn)直一個(gè)比一個(gè)劣質(zhì)。這一次見到的,算是垃圾中的戰(zhàn)斗機(jī)了。隨便找個(gè)網(wǎng)頁(yè)編輯器,自動(dòng)生成的HTML也比這強(qiáng)多了,再隨便找些css稍微修飾下,完全就不會(huì)被一眼看出是山寨套牌網(wǎng)頁(yè)了。尼瑪?shù)倪@本身就是暗地里的干活,卻沒有任何簡(jiǎn)單的加密混淆,還光明正大的明文寫著廣告字樣,這不是赤果果的秀智商下限嗎?

  不過今天既然花時(shí)間吐槽這破玩意,就干脆再深入的討論討論未來可能還會(huì)出現(xiàn)的變招。

Lv1. 當(dāng)前最常見的:把被劫持的網(wǎng)頁(yè)套在自己的空殼里

  其實(shí)這樣做的目的很明確,讓廣告顯示在瀏覽器的最上方。一般為了達(dá)到這個(gè)效果,會(huì)把廣告顯示在頁(yè)面的右下角,蓋住被劫持頁(yè)面的滾動(dòng)條,看起來就像是浮動(dòng)在瀏覽器之外一樣!

  這招夠狠,乍一看,還真以為是QQ之類的軟件彈出的消息框呢。不過只要把瀏覽器窗口退出最大化,順便再拖一下窗口,廣告也跟著動(dòng)起來了:)假李鬼就瞬間原形畢露了!

防范措施

  這種劫持毫無技術(shù)含量可言,反劫持也相當(dāng)容易。只要在自己網(wǎng)頁(yè)里驗(yàn)證下window.top,是不是在合法的URL列表里。如果不是,那就不允許被內(nèi)嵌在其他網(wǎng)頁(yè)內(nèi)。更好的辦法就是把top地址提交到后臺(tái)服務(wù)器上,統(tǒng)計(jì)下究竟有哪些網(wǎng)站套了自己的頁(yè)面。

Lv2. 在返回網(wǎng)頁(yè)里插入外鏈script>

  這種做法相比之前的,要隱蔽的多,至少不會(huì)把人家網(wǎng)頁(yè)的源文件給替換了。

  當(dāng)然,如果僅僅是在網(wǎng)頁(yè)的最后面插入script>,那還是能被瞬間揭穿,甚至?xí)?bào)毒,因?yàn)檫@太山寨了!有哪個(gè)正常的網(wǎng)頁(yè)會(huì)在/html>后面跟內(nèi)容呢?只有掛馬的腳本。。。

  不過,要是放對(duì)地方,還真不能一眼看出。例如把廣告的script src="">插在head>/head>其中的密密麻麻引用外部js的地方,至少能混上一段時(shí)間了。

防范措施

  一般來說,插入的script>大多都是外鏈形式的,這樣廣告變換會(huì)比較靈活。對(duì)于這種劫持,就要使用類似殺毒軟件掃描可疑模塊的原理。

  廣告不管怎樣插,最終都會(huì)以靜態(tài)HTML留在網(wǎng)頁(yè)里,這是不容抹去鐵證!

  當(dāng)我們的網(wǎng)頁(yè)HTML加載完畢,觸發(fā)DOMContentLoaded時(shí),我們可以開始掃描一遍DOM內(nèi)所有的script>標(biāo)簽。如果發(fā)現(xiàn)有不在信任列表里的src,那么網(wǎng)頁(yè)很有可能被注入了可疑的腳本!

  我們可以提交可疑腳本的url到后臺(tái)服務(wù)器,做進(jìn)一步認(rèn)證。如果確實(shí)有風(fēng)險(xiǎn),那么必須彈出警告框提醒用戶。

Lv3. 在返回網(wǎng)頁(yè)里插入內(nèi)置script>

  相比外鏈的腳本,內(nèi)置的就棘手的多。外鏈的url域名的總是那么幾個(gè),可以簡(jiǎn)單的實(shí)現(xiàn)過濾。但內(nèi)置腳本就千變?nèi)f化了!隨機(jī)變量名,插入廢代碼,各種玄乎。。。不過,魔高一尺,道高一丈~

防范措施

  想最簡(jiǎn)單的對(duì)付這種劫持,我們必須預(yù)先默認(rèn)個(gè)規(guī)定,來識(shí)別真假腳本元素。我們給自己的script>元素設(shè)置個(gè)固定的標(biāo)簽,例如script myjs="true">。當(dāng)然具體的標(biāo)簽名和值是經(jīng)常變動(dòng)的,對(duì)于劫持程序來說,顯然不知道會(huì)有這么個(gè)規(guī)矩,仍然傻乎乎的插入script>.../script>。

  于是在之后的"肅反運(yùn)動(dòng)"中,可以直接清洗掉了。。。

Lv4. 在返回網(wǎng)頁(yè)的script>里混入廣告代碼

  隨著劫持程序不斷升級(jí),招數(shù)會(huì)變的越來越狠。說不定某天,劫持程序內(nèi)置一個(gè)html語義分析器,智能的把廣告腳本合并混淆到頁(yè)面原先的js里!

  若要真是這樣,那么之前說的給自己的腳本元素加上特征碼也無濟(jì)于事了。因?yàn)樘貏?wù)已深深的混入到了我們內(nèi)部,真真假假很難被識(shí)別!

  最致命的是,腳本未必都是放在script>/script>,也有可能是element onxxx="">的內(nèi)聯(lián)形式。。。這下麻煩大了,我得想想怎么解決。。。

防范措施

  對(duì)于這種情況,還真找不到一個(gè)簡(jiǎn)單的方法來識(shí)別。唯一能走通的路,就是在發(fā)布HTML時(shí),記錄下文件的Hash值??梢园阎祵懭刖W(wǎng)頁(yè),或者存在數(shù)據(jù)庫(kù)里。

  當(dāng)網(wǎng)頁(yè)內(nèi)容加載完成時(shí),我們通過ajax再次讀取當(dāng)前頁(yè)面的內(nèi)容(一般來說讀的就是當(dāng)前頁(yè)面的緩存數(shù)據(jù))。通過同樣的算法算出頁(yè)面的校驗(yàn)值,和原始值一比對(duì),就知道頁(yè)面是否被第三方篡改了。

  我們還可以把篡改過的html發(fā)到后臺(tái),找出字符串差異部分,讓技術(shù)人員分析分析到底做了哪些手腳。

  當(dāng)然,這只限于靜態(tài)網(wǎng)頁(yè)。

Lv5. 在返回網(wǎng)頁(yè)的外鏈腳本里混入廣告代碼

  這招可算是終極篇 ———— 它完全不修改任何HTML內(nèi)容!

  然而,一般的網(wǎng)頁(yè)多多少少要外鏈幾個(gè)js文件吧。于是,那些外鏈的腳本就成了香餑餑的肥肉被盯上了!

  當(dāng)然也可以像驗(yàn)證html那樣,事先計(jì)算出所有的js文件的hash值,然后再使用ajax重新讀數(shù)據(jù)認(rèn)證比對(duì)。

  不過可別忘了,外鏈js的路徑可以是任意的,而ajax只能讀取同源站點(diǎn)。而且,外鏈的script>也無法讀取其text內(nèi)容。于是當(dāng)我們使用站點(diǎn)外的js文件時(shí),劫持程序可以肆無忌憚的從中混入代碼!

防范措施

  由于受到沙箱策略的嚴(yán)格控制,我們根本無法獲得外部js內(nèi)的實(shí)際內(nèi)容,所以:走為上。盡量不使用外部站點(diǎn)的js文件。

  對(duì)于自己站點(diǎn),但不是同個(gè)域名的,可以使用Flash的URLLoader跨域加載,只需部署一個(gè)crossdomain.xml即可。

Lv6. 把返回網(wǎng)頁(yè)的圖片內(nèi)容替換成廣告圖片

  這樣的流量劫持已經(jīng)超越人類了,趕緊派一個(gè)神做了它吧。。。

防范措施

  理論上,完全可以解決。事實(shí)上,也沒問題,只是工作量巨大。。。

  不過外鏈圖片不管同源還是跨域的,都可以由Flash直接讀取,所以可以和html和js一樣,我們使用文件二進(jìn)制的Hash比對(duì),同樣可以驗(yàn)證圖片數(shù)據(jù)是否被劫持。

  當(dāng)然要事先要計(jì)算出站點(diǎn)下或外鏈圖片的hash值,客戶端也要分析出當(dāng)前頁(yè)面里用到的圖片,并逐個(gè)驗(yàn)證。這不得不說是個(gè)蛋疼的過程。。。

 ?。剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑剑?/p>

  暫時(shí)就YY到這里,以后有新的想法或更好的解決方案,繼續(xù)來這里補(bǔ)充。

  大家有什么巧妙的檢測(cè)方法,歡迎留言~

  上面說了一大堆,其本質(zhì)無法就是在客戶端,把使用到的資源和服務(wù)器原始資源二進(jìn)制校驗(yàn),將出現(xiàn)問題的資源反饋給后臺(tái)記錄,找出安全隱患。

  雖然這里假象嵌入的僅僅是廣告腳本,然而這種腳本擁有和頁(yè)面內(nèi)其他腳本一樣的權(quán)限,因此可以輕而易舉的獲得用戶的cookie。

嵌入的腳本甚至可以通過WebSocket連接到黑客控制臺(tái),發(fā)送你的鼠標(biāo)和鍵盤的一舉一動(dòng),以及頁(yè)面上顯示的內(nèi)容;對(duì)方還可以遠(yuǎn)程控制,讓js在頁(yè)面里悄悄執(zhí)行各種意想不到的操作。。。

標(biāo)簽:湘西 三門峽 邵陽 辛集 呼倫貝爾 湖州 畢節(jié) 安陽

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《簡(jiǎn)單分析網(wǎng)站流量劫持防范措施(圖文)》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    东乌珠穆沁旗| 海南省| 江门市| 中西区| 城市| 崇文区| 伊金霍洛旗| 苏州市| 平阳县| 无极县| 雅安市| 开江县| 阿拉善盟| 山丹县| 田阳县| 北安市| 外汇| 吉安县| 临洮县| 丹凤县| 泽州县| 禹州市| 大埔区| 扎兰屯市| 仙桃市| 噶尔县| 将乐县| 九寨沟县| 十堰市| 宁晋县| 静海县| 拉孜县| 苏尼特左旗| 涿鹿县| 皋兰县| 桦南县| 西乌珠穆沁旗| 楚雄市| 东宁县| 新泰市| 剑阁县|