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