使用WebSocket绕过广告屏蔽插件
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
現(xiàn)在網(wǎng)絡(luò)上的廣告真的是無所不用其極,在網(wǎng)上沖浪,稍不留神,隨時(shí)隨地都會(huì)碰上廣告,于是廣告屏蔽這個(gè)需求,就應(yīng)運(yùn)而生了。古語云,道高一尺魔高一丈。今天這篇文章就介紹了BugReplay是如何發(fā)現(xiàn)美國成人網(wǎng)站Pornhub使用WebSocket繞過廣告屏蔽插件。
這篇文章的本意并非是如何繞開廣告屏蔽機(jī)制,而是用戶了解情況后,在如何反制廣告商上縮短探索的時(shí)間。
這篇文章重現(xiàn)了BugReplay的工程師發(fā)現(xiàn)美國成人網(wǎng)站是如何使用WebSocket繞過廣告屏蔽插件的過程,視頻演示可在此處觀看。
當(dāng)構(gòu)建BugReplay的原型時(shí),BugReplay的工程師評估了Chrome捕捉和分析網(wǎng)絡(luò)流量的不同方法。第一個(gè)就是看起來很有前途的chrome.webRequest API。
它的文檔有如下的說明:
“使用chrome.webRequest API來觀察和分析流量,并攔截、阻止或修改請求。”
這似乎正是BugReplay需要的。
在使用Chrome webRequest API進(jìn)行實(shí)驗(yàn)后,該工程師很快意識(shí)到有一個(gè)大問題。它不允許用戶分析任何WebSocket流量,而這個(gè)功能是用戶真正需要的東西。
BugReplay發(fā)現(xiàn)2012年有一個(gè)相關(guān)的bug報(bào)告:
“chrome.webRequest.onBeforeRequest不攔截WebSocket請求。”
在這份Bug報(bào)告中,用戶抱怨未能阻止WebSockets,以致網(wǎng)站可以輕易的繞過廣告屏蔽插件。如果WebSocket數(shù)據(jù)通過webRequest API對Chrome擴(kuò)展不可見,沒有一些重型攻擊他們不能被屏蔽。
最初,理論上屏蔽廣告似乎是有風(fēng)險(xiǎn)的。采用這種技術(shù)的網(wǎng)站的案例非常模糊。在2016年8月,一位來自擁有Pornhub.com(MindGeek)的公司的員工,開始反對Chrome API添加WebSocket屏蔽功能。依照Alexa的數(shù)據(jù),Pornhub是互聯(lián)網(wǎng)上第63個(gè)訪問量最大的網(wǎng)站。BugReplay檢查了幾個(gè)MindGeek的網(wǎng)站,果不其然,他們發(fā)現(xiàn),即使已經(jīng)安裝Adblock Plus插件,也能看到這些來自MindGeek所屬的廣告網(wǎng)絡(luò)中的Pornhub廣告,被標(biāo)識(shí)位“垃圾廣告”。
在下面的截圖中,你可以在網(wǎng)頁頂部看到一個(gè)橫幅,表明該網(wǎng)站已發(fā)覺用戶使用了廣告屏蔽插件,并邀請用戶訂閱收費(fèi)廣告免費(fèi)版的網(wǎng)站。在網(wǎng)頁的右側(cè)你能看到廣告。
他們是如何做到的?
當(dāng)用戶訪問Pornhub.com時(shí),它會(huì)嘗試檢測您是否有廣告屏蔽插件,如果檢測到一個(gè),它就打開一個(gè)WebSocket連接,作為傳遞廣告的備份機(jī)制。
查看BugReplay瀏覽器記錄,你可以看到多個(gè)網(wǎng)絡(luò)觸發(fā)請求,被AdBlock阻止了:它們在網(wǎng)絡(luò)流量中被標(biāo)記為“失敗”,如果你單擊詳細(xì)信息中的一條,你能看到失敗原因是:net::ERR_BLOCKED_BY_CLIENT. 這是Chrome阻止資源加載時(shí)報(bào)告的錯(cuò)誤。
你可以在網(wǎng)絡(luò)面板中單獨(dú)找到WebSocket框架,或者只查看WebSocket創(chuàng)建請求。WebSocket連接的域名是:“ws://ws.adspayformy.site.” ,這不過是針對廣告屏蔽插件的玩笑而已。
當(dāng)WebSocket加載時(shí),瀏覽器為每個(gè)可用于廣告的點(diǎn)發(fā)送一個(gè)帶有JSON編碼有效載荷的幀。檢出一個(gè)WebSocket框架,你可以在框架數(shù)據(jù)中看到廣告數(shù)據(jù)被返回:
- 在
zone_13,JavaScript應(yīng)放置廣告。2. 在media_type的圖像,讓頁面知曉用哪種元素來創(chuàng)建(大多數(shù)是視頻廣告,在這篇文章我選擇了一張圖像,因?yàn)檫@樣相對溫和)。3. 圖像本身是base64編碼的,因此可以使用data uri scheme來重建。4. 一個(gè)“img_type”(“image/jpeg”)通過data uri。
廣告屏蔽插件主要是用webRequest API進(jìn)行工作的,因此通過在WebSocket上利用base64編碼來傳輸數(shù)據(jù)構(gòu)建廣告,是一個(gè)繞開廣告屏蔽的相當(dāng)聰明的方式。
下一步是什么
2016年10月25日,在Chromium Tracker上,一名貢獻(xiàn)者寫了一個(gè)補(bǔ)丁,增加了使用webRequest API來阻止WebSockets的能力。如果這個(gè)補(bǔ)丁被接受,將會(huì)集成到Chrome stable版。
廣告屏蔽插件作者可以選擇在何時(shí)或何時(shí)推出最新版本的Chrome瀏覽器,以便讓內(nèi)容提供商(如Pornhub)了解他們在廣告屏蔽戰(zhàn)爭中的下一步行動(dòng)。
更新
自從BugReplay開始研究這個(gè)技術(shù)時(shí),AdBlock Plus和uBlock Origin已經(jīng)發(fā)布解決方法來阻止這種技術(shù),而AdBlock和其他人還沒有。
對于AdBlock Plus而言,包裝器在發(fā)送/接收WebSocket消息之前執(zhí)行虛擬Web請求。擴(kuò)展將這些虛擬Web請求識(shí)別為表示W(wǎng)ebSocket消息。如果應(yīng)該阻止相應(yīng)的WebSocket消息,它就攔截并阻止它們。然后WebSocket包裝器基于虛擬web請求是否被阻止來決定允許/阻止WebSocket消息。
對于uBlock Origin來說,他們發(fā)布了一個(gè)解決方法,具有“使用CSP指令來屏蔽WebSocket的能力”。
轉(zhuǎn)載于:https://my.oschina.net/xuxueli/blog/790779
總結(jié)
以上是生活随笔為你收集整理的使用WebSocket绕过广告屏蔽插件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 再见c罗再见梅西_再见,再见,5 * 6
- 下一篇: 微信注销账号