韋俊琳,段海新,白 宇,季姝廷,張皓宇
1(清華大學(xué) 網(wǎng)絡(luò)科學(xué)研究院 網(wǎng)絡(luò)空間安全實(shí)驗(yàn)室,北京 100084)
2(北京百度網(wǎng)訊科技有限公司,北京 100085)
3(天津市大數(shù)據(jù)管理中心,天津 300221)
E-mail:weijl6819@gmail.com
互聯(lián)網(wǎng)在長(zhǎng)期的發(fā)展中,形成一種穩(wěn)定的用戶與網(wǎng)站之間的商業(yè)模式.該商業(yè)模式存在隱藏協(xié)議,由網(wǎng)站為用戶提供“免費(fèi)”內(nèi)容信息,而廣告作為“免費(fèi)”內(nèi)容的價(jià)格[1].互聯(lián)網(wǎng)的飛速發(fā)展得益于該商業(yè)模式提供的雙贏場(chǎng)景,在線用戶以極低的成本訪問(wèn)由廣告贊助的免費(fèi)網(wǎng)站內(nèi)容服務(wù),而廣告流量作為網(wǎng)站提供服務(wù)的補(bǔ)助收入,進(jìn)一步激勵(lì)網(wǎng)站提供更多優(yōu)質(zhì)的內(nèi)容,該商業(yè)模式下的隱藏協(xié)議對(duì)于網(wǎng)站的可持續(xù)發(fā)展有著積極的作用[2].在互聯(lián)網(wǎng)時(shí)代,廣告是眾多互聯(lián)網(wǎng)公司的主要收入來(lái)源之一,如Facebook、Google、Twitter、騰訊和百度等.根據(jù)2018年各互聯(lián)網(wǎng)公司年度收入報(bào)告,谷歌的廣告收入高達(dá)307.2億美元、阿里巴巴廣告年收入約為218.1億美元、百度廣告收入占比雖然占比下滑,但廣告收入仍超過(guò)百億美元,廣告收入超過(guò)80%以上的占比,它為互聯(lián)網(wǎng)產(chǎn)業(yè)的發(fā)展做出了不小的貢獻(xiàn).廣告就像稅收,沒(méi)人喜歡,但它們的存在卻是必要的.廣告作為信息傳播的主要工具,積極為品牌做推廣,為新品牌做宣傳,不斷催化商業(yè)市場(chǎng)進(jìn)步,在促進(jìn)經(jīng)濟(jì)發(fā)展方面起著積極向上的作用.
廣告市場(chǎng)由于缺乏有效的市場(chǎng)監(jiān)督管控方法,會(huì)出現(xiàn)投放虛假?gòu)V告和跟蹤用戶行為等威脅用戶信息安全的行為[3].廣告行業(yè)利潤(rùn)龐大,很難避免部分商家投放惡意廣告,廣告行業(yè)需要一定的監(jiān)管方案,如果監(jiān)管不到位,就會(huì)威脅用戶的信息安全.ADBlock Plus的正式上線,作為廣告攔截器對(duì)打擊惡意廣告投放起到了積極的作用,但封殺正規(guī)廣告的行為卻嚴(yán)重影響了互聯(lián)網(wǎng)長(zhǎng)期穩(wěn)定發(fā)展所形成的用戶與網(wǎng)站的商業(yè)模式.谷歌瀏覽器也在2018年推出內(nèi)置廣告攔截功能,要求只能展示符合其定義的標(biāo)準(zhǔn)規(guī)范的廣告.而且廣告攔截器的發(fā)展方向也發(fā)生了變化,廣告屏蔽器的種類層出不窮,攔截廣告內(nèi)容很少區(qū)分是否為惡意廣告,將攔截器認(rèn)定為廣告的內(nèi)容一律攔截[4].廣告攔截器的出現(xiàn)嚴(yán)重破壞了網(wǎng)站為用戶“免費(fèi)”提供內(nèi)容的商業(yè)模式,對(duì)在線廣告生態(tài)系統(tǒng)造成了巨大的威脅[5].廣告攔截器的興起給在線網(wǎng)絡(luò)服務(wù)帶來(lái)了一些潛在威脅,這可能會(huì)嚴(yán)重影響通過(guò)廣告補(bǔ)貼網(wǎng)站向用戶免費(fèi)提供的內(nèi)容商業(yè)模式[6].
廣告供應(yīng)商面對(duì)廣告攔截器處于被動(dòng),絕大部分依賴廣告收入的互聯(lián)網(wǎng)公司都備受打擊,廣告供應(yīng)商需要采取主動(dòng)的方式對(duì)抗廣告攔截器對(duì)廣告的攔截.ADBlock Plus為首的廣告攔截器的使用用戶比例較高,而且呈現(xiàn)持續(xù)增長(zhǎng)的態(tài)勢(shì),導(dǎo)致廣告供應(yīng)商投放的廣告展示成功率大幅度下降.反廣告攔截研究對(duì)廣告供應(yīng)商成功投放廣告,挽回廣告損失至關(guān)重要.不同網(wǎng)站應(yīng)用的反廣告攔截方案不同,目前的大部分網(wǎng)站所采用的反廣告攔截方案是通過(guò)檢測(cè)廣告攔截器的存在,提示用戶關(guān)閉或提供不同的網(wǎng)站內(nèi)容,這種方案相當(dāng)于將選擇權(quán)交給用戶,放棄了和廣告攔截器的對(duì)抗,不利于廣告行業(yè)的持續(xù)發(fā)展.利用WebSocket繞過(guò)廣告攔截器的方法在廣告攔截器新增了對(duì)WebSocket的檢測(cè)后也難以繼續(xù)生效.而且目前研究領(lǐng)域?qū)V告攔截的研究偏多,而反廣告攔截的研究則偏少,呈現(xiàn)明顯的不對(duì)等性.對(duì)廣告供應(yīng)商而言,反廣告攔截的存在至關(guān)重要,廣告供應(yīng)商需要采用主動(dòng)的方式對(duì)抗廣告攔截器[7-9].
本文深入研究有效的廣告反屏蔽技術(shù),借助CDN系統(tǒng)搭建廣告反屏蔽系統(tǒng),旨在提高廣告展示的成功率,增加廣告供應(yīng)商的收益.首先對(duì)最主流的廣告攔截器 ADBlock Plus 進(jìn)行研究,深入分析攔截器對(duì)廣告的攔截原理.在充分了解廣告攔截器攔截廣告原理的基礎(chǔ)上采取針對(duì)性防護(hù)方案,對(duì)廣告元素資源地址進(jìn)行加密,對(duì)抗廣告攔截器對(duì)資源請(qǐng)求的特征匹配;對(duì)元素屬性進(jìn)行隨機(jī)化,對(duì)抗廣告攔截器對(duì)元素屬性的規(guī)則檢測(cè).本文使用CDN系統(tǒng)搭建的廣告反屏蔽系統(tǒng),不需要廣告服務(wù)器改變就能實(shí)現(xiàn)對(duì)抗廣告攔截的效果,實(shí)現(xiàn)了對(duì)廣告服務(wù)器的透明化,具有良好的兼容性和可擴(kuò)展性.利用動(dòng)態(tài)化的思想,對(duì)廣告資源地址進(jìn)行加密,加密的資源請(qǐng)求讓廣告攔截器無(wú)法通過(guò)匹配資源地址特征來(lái)檢測(cè)廣告請(qǐng)求,對(duì)元素屬性名進(jìn)行隨機(jī)化,讓廣告攔截器通過(guò)屬性名定位廣告元素的方法失效.反廣告屏蔽系統(tǒng)實(shí)際應(yīng)用于百度反廣告屏蔽,大幅度提高了百度聯(lián)盟投放的廣告的成功率.本廣告反屏蔽方案應(yīng)用于百度聯(lián)盟,作為國(guó)內(nèi)大型廣告代理商,讓正規(guī)廣告能夠正常展示,不為惡意廣告商提供服務(wù).
以下為本文的主要貢獻(xiàn):
1)分析總結(jié)廣告攔截器對(duì)廣告的攔截原理,將廣告攔截器的主要功能劃分為兩個(gè)模塊,廣告資源請(qǐng)求攔截和廣告元素隱藏
2)提出使用元素隨機(jī)化的方法應(yīng)對(duì)廣告攔截器對(duì)廣告內(nèi)容的攔截,提出利用JavaScript代碼動(dòng)態(tài)執(zhí)行的特性對(duì)靜態(tài)元素和動(dòng)態(tài)元素的隨機(jī)化方案,提供了新的方法對(duì)抗廣告攔截器,為廣告供應(yīng)商提供了新的廣告反屏蔽方案
3)在百度CDN處搭建廣告反屏蔽系統(tǒng),并對(duì)系統(tǒng)進(jìn)行廣告請(qǐng)求對(duì)比測(cè)試,廣告展示對(duì)比測(cè)試和廣告上線運(yùn)行測(cè)試.測(cè)試結(jié)果表明使用廣告反屏蔽方案能夠顯著提高廣告請(qǐng)求和廣告展示的成功率,提升了百度聯(lián)盟10%以上的廣告展示成功量,帶來(lái)了將近25億的廣告收入提升
本文第二節(jié)介紹相關(guān)工作,包括廣告攔截器和廣告反攔截器;第三節(jié)介紹廣告反屏蔽系統(tǒng)模型,包括攔截器原理和廣告反屏蔽系統(tǒng)架構(gòu);第四節(jié)介紹系統(tǒng)具體實(shí)現(xiàn),從反屏蔽流程、靜態(tài)元素和動(dòng)態(tài)元素進(jìn)行介紹;第五節(jié)介紹實(shí)驗(yàn)部分,對(duì)比測(cè)試廣告請(qǐng)求成功率、廣告展示成功率和實(shí)際上線對(duì)比測(cè)試;第六節(jié)對(duì)全文進(jìn)行總結(jié)與展望.
目前最常用的廣告攔截器包括ADBlock Plus、uBlock、Adguard和瀏覽器的內(nèi)置攔截等.廣告攔截器通過(guò)匹配廣告請(qǐng)求、識(shí)別廣告元素屬性信息等方式選定廣告元素,然后實(shí)施請(qǐng)求攔截和元素隱藏等攔截行為.廣告攔截器對(duì)于清除惡意廣告,為用戶提供一個(gè)安全的上網(wǎng)瀏覽環(huán)境起著積極向上的作用,但廣告攔截軟件通殺廣告的行為給廣告市場(chǎng)帶來(lái)了滅頂之災(zāi).近年來(lái)發(fā)表的廣告攔截器相關(guān)研究[11-19],主要在完善廣告攔截器攔截列表做出貢獻(xiàn).根據(jù)Shitong Zhu等人的研究,為檢測(cè)反廣告屏蔽器,補(bǔ)充攔截列表做出了不小的貢獻(xiàn).而且根據(jù)Mohd Iskandar等人的研究結(jié)果,廣告攔截器也在不斷發(fā)展更新,向著DNS層演化.另一方面,廣告攔截方推出了白名單機(jī)制,初衷是為了彌補(bǔ)廣告攔截器的規(guī)則誤判,但實(shí)際上白名單卻成為了廣告攔截方對(duì)廣告商投放廣告的變相收費(fèi).廣告供應(yīng)商如果想采用白名單的方式推出廣告需要對(duì)廣告模板及內(nèi)容做很大的調(diào)整,廣告模板的多樣和廣告業(yè)務(wù)內(nèi)部的復(fù)雜讓這種方式推動(dòng)起來(lái)極為困難.而且廣告攔截器種類繁多,讓廣告供應(yīng)商滿足所有的廣告攔截器的方式并不可行.
廣告供應(yīng)商為了能夠減小廣告投放效果的損失,需要探索有效的廣告反攔截器的方法,廣告供應(yīng)商與廣告攔截器之間展開(kāi)了長(zhǎng)期的對(duì)抗戰(zhàn).廣告供應(yīng)商和廣告攔截器之間的矛盾沖突不可避免,如Facebook采用一系列改變廣告投放方式的方法對(duì)抗廣告攔截器;部分網(wǎng)站通過(guò)檢查廣告攔截器的存在而限制用戶訪問(wèn)的內(nèi)容,部分新聞網(wǎng)站如“金融時(shí)報(bào)”,“華爾街日?qǐng)?bào)”等更是推出了付費(fèi)特區(qū)提供無(wú)廣告或訂閱廣告的服務(wù);還有一些博客網(wǎng)站則是通過(guò)提示用戶關(guān)閉廣告攔截器來(lái)展示頁(yè)面內(nèi)容.據(jù)Rishab Nithyan等人在2016年對(duì)Alexa Top-5K進(jìn)行檢測(cè),約有6.7%的網(wǎng)站存在反廣告攔截器的存在[4];Umar Iqbal等人2017年采用Wayback Machine對(duì)Alexa top-5K的網(wǎng)站進(jìn)行檢測(cè),檢測(cè)結(jié)果顯示約有9%的網(wǎng)站存在反廣告攔截器[7];據(jù)Shitong Zhu等人在2018年采用差分分析對(duì)Alexa Top-10K的網(wǎng)站進(jìn)行檢測(cè),結(jié)果表明30.5%的網(wǎng)站存在反廣告攔截功能[8].網(wǎng)站采用反廣告攔截的快速增長(zhǎng)進(jìn)一步驗(yàn)證了廣告供應(yīng)商和廣告攔截器之間的戰(zhàn)火持續(xù)升級(jí).
廣告反攔截技術(shù)形式多樣,其中使用JavaScript檢查當(dāng)前用戶是否使用廣告攔截器,根據(jù)檢測(cè)結(jié)果來(lái)調(diào)整網(wǎng)站服務(wù)模式可能會(huì)影響用戶體驗(yàn),不是最佳的選擇方案.Weihang Wang等人提出了WebRanz[10]工具,使用URL隨機(jī)化和內(nèi)容隨機(jī)化對(duì)抗廣告攔截器,使得廣告攔截器不能根據(jù)列表來(lái)識(shí)別廣告內(nèi)容,這為使用隨機(jī)化技術(shù)對(duì)抗廣告攔截開(kāi)創(chuàng)了新思路.不過(guò)WebRanz系統(tǒng)需要在服務(wù)器端直接做較多修改,不利于系統(tǒng)的推廣部署.另一種廣泛使用的辦法是使用WebSocket繞過(guò)廣告攔截器對(duì)廣告請(qǐng)求的監(jiān)聽(tīng)[9],原因在于廣告攔截器原有的監(jiān)聽(tīng)方式無(wú)法監(jiān)聽(tīng)WebSocket的請(qǐng)求,但當(dāng)廣告攔截器對(duì)WebSocket的請(qǐng)求進(jìn)行監(jiān)聽(tīng)后,該方法難以繼續(xù)生效.
廣告供應(yīng)商的廣告模板種類繁多,需要一種對(duì)廣告服務(wù)器透明的通用反屏蔽方案來(lái)應(yīng)對(duì)廣告攔截.鑒于目前網(wǎng)站及網(wǎng)站廣告投放采用CDN系統(tǒng)進(jìn)行緩存加速已經(jīng)非常普遍,廣告反屏蔽系統(tǒng)也在CDN系統(tǒng)進(jìn)行搭建,以便于能夠廣泛部署和推廣.
廣告反屏蔽系統(tǒng)是在分析廣告攔截器原理的基礎(chǔ)上進(jìn)行的,針對(duì)廣告攔截器的原理采取針對(duì)性方案進(jìn)行對(duì)抗.首先對(duì)廣告攔截器的原理進(jìn)行分析總結(jié),找到廣告攔截器對(duì)廣告攔截的要點(diǎn).廣告反屏蔽系統(tǒng)充分應(yīng)用隨機(jī)化的思想來(lái)對(duì)抗廣告攔截器,對(duì)抗要點(diǎn)一為通過(guò)對(duì)廣告元素的資源地址進(jìn)行加密來(lái)對(duì)抗廣告攔截器對(duì)資源請(qǐng)求內(nèi)容進(jìn)行的特征匹配,對(duì)抗要點(diǎn)二為通過(guò)對(duì)廣告元素的屬性進(jìn)行隨機(jī)化來(lái)對(duì)抗廣告攔截器對(duì)元素屬性進(jìn)行的特征匹配.
目前的廣告屏蔽軟件種類繁多,鑒于ADBlock Plus 在廣告屏蔽市場(chǎng)中占據(jù)的絕對(duì)地位[3],本文對(duì) ADBlock Plus 進(jìn)行了深入分析,以尋求合適的對(duì)抗方法.ADBlock Plus 屬于瀏覽器擴(kuò)展,適用于Chrome、Safari、Firefox 等主流瀏覽器,通過(guò)使用瀏覽器為擴(kuò)展開(kāi)發(fā)提供的大量接口API,控制瀏覽器發(fā)出的所有請(qǐng)求和監(jiān)控頁(yè)面渲染的過(guò)程.經(jīng)過(guò)分析發(fā)現(xiàn),廣告攔截器的第一道關(guān)隘為廣告請(qǐng)求攔截.廣告攔截器能夠監(jiān)管網(wǎng)站頁(yè)面發(fā)出的資源請(qǐng)求,并從中提取出網(wǎng)站發(fā)出的所有資源請(qǐng)求,將提取出的資源請(qǐng)求與廣告攔截器預(yù)先設(shè)置的規(guī)則列表進(jìn)行匹配.如資源請(qǐng)求https://ad.domain.com/path/ad.png?query=ad&type=png 會(huì)被路徑匹配規(guī)則 /*/ad.png^、域名匹配規(guī)則 ||ad.domain.com^ 等選中,標(biāo)識(shí)為廣告請(qǐng)求,然后阻斷該資源請(qǐng)求.廣告攔截器的第二道關(guān)隘為廣告元素隱藏.廣告攔截器通過(guò)向頁(yè)面注入JavaScript腳本實(shí)施對(duì)頁(yè)面元素的監(jiān)控,使用 CSS3 Selecor 識(shí)別元素屬性選取目標(biāo)元素.如使用 ###ad 匹配 id 屬性為 ad 的元素、使用 ##.ad 匹配 class 為 ad 的元素和使用##div[style="width:300px;height:250px;"]匹配 style 屬性寬為300px,高為200px 的DIV元素等.在完成廣告元素定位后,廣告屏蔽器添加 display:none !important;以修改元素的狀態(tài),使廣告元素隱藏.廣告攔截器通過(guò)攔截請(qǐng)求和隱藏元素阻擾廣告元素的正常展示,在標(biāo)準(zhǔn)的廣告展示流程中設(shè)置關(guān)隘,對(duì)判定為廣告的元素實(shí)施攔截.
圖1 系統(tǒng)模型
鑒于廣告攔截器根據(jù)資源請(qǐng)求的特征來(lái)識(shí)別廣告請(qǐng)求和根據(jù)元素屬性來(lái)識(shí)別廣告元素,廣告反屏蔽系統(tǒng)也對(duì)應(yīng)分為對(duì)抗資源請(qǐng)求匹配和對(duì)抗元素屬性匹配兩部分主要功能.處理資源請(qǐng)求為對(duì)廣告資源請(qǐng)求進(jìn)行加密,處理元素屬性為對(duì)元素屬性名進(jìn)行隨機(jī)化.廣告反屏蔽模型如圖1所示,系統(tǒng)位于瀏覽器和廣告服務(wù)器之間,適用于現(xiàn)今廣泛應(yīng)用的CDN系統(tǒng),通過(guò)CDN系統(tǒng)與瀏覽器前端配合完成對(duì)資源請(qǐng)求的加密和對(duì)元素屬性的隨機(jī)化.廣告反屏蔽系統(tǒng)在網(wǎng)站服務(wù)器返回的主頁(yè)中插入JavaScript腳本,插入的腳本通過(guò)劫持DOM API完成對(duì)廣告資源地址和元素屬性的隨機(jī)化.反屏蔽系統(tǒng)識(shí)別加密的資源請(qǐng)求,對(duì)加密的資源請(qǐng)求進(jìn)行解密還原,保持對(duì)廣告服務(wù)器的透明性.
廣告反屏蔽系統(tǒng)的核心在于對(duì)目標(biāo)元素使用隨機(jī)化來(lái)應(yīng)對(duì)廣告攔截器對(duì)廣告內(nèi)容的識(shí)別.廣告元素的成功展示主要分為兩個(gè)步驟,資源請(qǐng)求和資源顯示.廣告攔截針對(duì)資源請(qǐng)求和資源顯示兩個(gè)方面做出了攔截,反屏蔽的要點(diǎn)也集中在了對(duì)目標(biāo)元素地址和元素內(nèi)容的保護(hù).
廣告反屏蔽系統(tǒng)對(duì)廣告服務(wù)器保持透明化,采用中間件和瀏覽器前端配合的方式完成.前端首先通過(guò)中間件訪問(wèn)網(wǎng)站,中間件在獲取網(wǎng)站頁(yè)面后,在廣告內(nèi)容前插入反屏蔽腳本并對(duì)靜態(tài)廣告元素進(jìn)行處理后,將修改后的頁(yè)面發(fā)送給前端.前端接收中間件返回的網(wǎng)站內(nèi)容后,首先執(zhí)行反屏蔽腳本,腳本劫持 DOM 調(diào)用頁(yè)面元素使用的接口,預(yù)設(shè)頁(yè)面渲染過(guò)程中廣告元素加載需要使用的參數(shù).頁(yè)面渲染時(shí)對(duì)廣告資源請(qǐng)求進(jìn)行加密.加密后的請(qǐng)求會(huì)發(fā)送到中間件,中間件對(duì)加密請(qǐng)求進(jìn)行解密還原后發(fā)送到服務(wù)器,解密還原后的資源請(qǐng)求與未做反屏蔽處理前一致,不影響服務(wù)器正常工作流程.瀏覽器收到服務(wù)器返回的資源后進(jìn)行顯示,展示時(shí)對(duì)元素屬性進(jìn)行隨機(jī)化,讓廣告屏蔽器對(duì)頁(yè)面元素屬性的檢測(cè)失效.
上述流程實(shí)現(xiàn)對(duì)廣告元素的隨機(jī)化,對(duì)資源地址和元素屬性內(nèi)容進(jìn)行隨機(jī)化以擾亂廣告攔截器對(duì)廣告元素的攔截.但廣告元素又分為靜態(tài)元素和動(dòng)態(tài)元素,在前端展示的方式不同,需要分別進(jìn)行處理.
靜態(tài)元素是指服務(wù)器端返回頁(yè)面時(shí)就已經(jīng)生成的元素,如圖2所示,靜態(tài)廣告通常由內(nèi)容發(fā)布者提供,通過(guò)中央域名展示廣告.
圖2 靜態(tài)廣告示例
本文提出了兩種方案處理靜態(tài)元素:方案一,在CDN處反向代理主頁(yè),解析頁(yè)面定位目標(biāo)廣告元素,然后對(duì)廣告元素進(jìn)行隨機(jī)化處理.在中間件處對(duì)服務(wù)器返回頁(yè)面進(jìn)行處理,使用Openresty 的第三方庫(kù)Gumbo-lua 解析返回頁(yè)面,將頁(yè)面解析成DOM形式.然后遍歷解析后的頁(yè)面,定位目標(biāo)元素位置,加密目標(biāo)資源地址,最后將處理后的頁(yè)面返回給瀏覽器端.本方案適用于可以臨時(shí)存儲(chǔ)完整頁(yè)面的CDN系統(tǒng),如果只能進(jìn)行流式代理,則無(wú)法使用.方案二,不在CDN處進(jìn)行頁(yè)面解析,只在頁(yè)面中插入JavaScript腳本,將對(duì)靜態(tài)元素的隨機(jī)化處理交給前端.在前端進(jìn)行靜態(tài)內(nèi)容重加載,在頁(yè)面添監(jiān)聽(tīng)函數(shù) window.onload = function(){…},該函數(shù)在DOM加載完成后執(zhí)行.遍歷頁(yè)面完成后的元素,檢查每個(gè)標(biāo)簽的 src/href 是否需要進(jìn)行替換,如果需要替換,則進(jìn)行下一步的加密替換,否則,不進(jìn)行修改.對(duì)元素屬性的處理需要進(jìn)行預(yù)定義,指明需要進(jìn)行隨機(jī)化替換的目標(biāo)元素.
動(dòng)態(tài)元素是指服務(wù)器返回JavaScript代碼,由客戶端運(yùn)行代碼后生成的元素,如圖3所示.動(dòng)態(tài)廣告通常由在線廣告供應(yīng)商或廣告網(wǎng)絡(luò)提供,托管在內(nèi)容服務(wù)器上.與靜態(tài)廣告相比,它們可以由各種廣告網(wǎng)絡(luò)擁有的多個(gè)域提供.廣告內(nèi)容通常是動(dòng)態(tài)加載的,并且每次加載時(shí)內(nèi)容都可能不同.動(dòng)態(tài)廣告的展示需要加載不同的廣告服務(wù)器資源才能成功,如果其中任何一個(gè)步驟被廣告攔截器攔截,就會(huì)導(dǎo)致廣告展示失敗.廣告攔截器監(jiān)聽(tīng)所有的網(wǎng)站資源請(qǐng)求,會(huì)對(duì)請(qǐng)求的域名、路徑、請(qǐng)求等參數(shù)進(jìn)行特征識(shí)別,如果被判定為廣告請(qǐng)求,則會(huì)攔截請(qǐng)求.
圖3 動(dòng)態(tài)元素生成方式
反屏蔽系統(tǒng)利用JavaScript代碼動(dòng)態(tài)加載的特性,劫持元素動(dòng)態(tài)生成的賦值過(guò)程.如對(duì)id的賦值操作img.id = “ad_png”進(jìn)行劫持,將新生成的id值變成隨機(jī)字符串,消除元素屬性名稱的特征;對(duì)src的賦值操作進(jìn)行劫持,對(duì)新生成的資源地址進(jìn)行加密,消除資源地址中的特征.將JavaScript動(dòng)態(tài)加載的特性應(yīng)用于劫持元素屬性賦值操作,圖4所示為劫持img.id 的賦值操作,劫持后的id屬性賦值操作都會(huì)先運(yùn)行randomId函數(shù)才能生成.元素動(dòng)態(tài)生成時(shí),使用該方法對(duì)id、class和src等賦值操作進(jìn)行劫持控制,讓新生成的動(dòng)態(tài)元素的屬性值隨機(jī)化,并對(duì)新生成的廣告資源請(qǐng)求進(jìn)行加密.
圖4 JavaScript代碼劫持控制
Fig.4 JavaScript hook control
對(duì)id、class的隨機(jī)化會(huì)影響到JavaScript對(duì)頁(yè)面元素的定位選取,需要進(jìn)行額外修復(fù)以保障頁(yè)面功能正常,如getElementById、getElementsByClass、querySelector等.修復(fù)示例如圖5所示,重寫(xiě)document.getElementById函數(shù),在自定義函數(shù)中通過(guò)隨機(jī)化前后映射關(guān)系定位到元素位置,傳給原始getElementById函數(shù),以保障功能正常.
圖5 元素定位修復(fù)
靜態(tài)元素隨機(jī)化的方案二也依賴于動(dòng)態(tài)元素隨機(jī)化,要點(diǎn)在于將靜態(tài)元素轉(zhuǎn)換成動(dòng)態(tài)元素.在window.onload監(jiān)聽(tīng)到頁(yè)面加載完成后,重新生成被廣告攔截器攔截而渲染失敗的靜態(tài)元素,將靜態(tài)元素轉(zhuǎn)換成動(dòng)態(tài)元素.如廣告圖片的資源請(qǐng)求被攔截,導(dǎo)致廣告圖片展示失敗,在遍歷頁(yè)面時(shí)使用JavaScript重新生成,在重新生成時(shí)的資源地址賦值操作則和動(dòng)態(tài)元素的隨機(jī)化一致.
廣告反屏蔽系統(tǒng)在百度云加速部門(mén)搭建,百度云加速負(fù)責(zé)百度CDN管理,代理百度聯(lián)盟的廣告流量.在百度CDN處反向代理廣告網(wǎng)站,對(duì)返回的廣告內(nèi)容進(jìn)行處理,在頁(yè)面中插入反屏蔽腳本.頁(yè)面在前端加載時(shí),發(fā)送加密的資源請(qǐng)求到中間件處,中間件對(duì)加密請(qǐng)求解密還原,發(fā)送到百度聯(lián)盟.最后將百度聯(lián)盟返回的資源發(fā)送到前端,由前端渲染展示廣告內(nèi)容.當(dāng)資源請(qǐng)求被廣告攔截器攔截或者廣告內(nèi)容被廣告攔截器隱藏時(shí),會(huì)導(dǎo)致廣告展示失敗.
在百度CDN上線廣告反屏蔽功能前,需要對(duì)百度聯(lián)盟的不同廣告模板和廣告內(nèi)容進(jìn)行測(cè)試.正常情況下,訪問(wèn)網(wǎng)站時(shí)只有使用廣告攔截器的用戶才會(huì)導(dǎo)致廣告請(qǐng)求或顯示失敗,當(dāng)中間件檢測(cè)到第一次廣告資源請(qǐng)求時(shí),證明測(cè)試廣告成功從瀏覽器端發(fā)出.測(cè)試廣告展示效果時(shí),在注入的JavaScript腳本中添加監(jiān)控腳本,當(dāng)廣告成功展示后,會(huì)向中間件廣告展示發(fā)出成功的信號(hào).
搭建廣告反屏蔽系統(tǒng)后,進(jìn)行了以下三項(xiàng)測(cè)試,分別為廣告請(qǐng)求成功比例、廣告展示成功比例和上線三天對(duì)比測(cè)試.廣告請(qǐng)求和廣告展示測(cè)試為上線前測(cè)試,分別為CDN上開(kāi)啟和關(guān)閉反屏蔽10分鐘獲得的測(cè)試結(jié)果,廣告測(cè)試總量在相同時(shí)間間隔內(nèi)的投放量相近,可通過(guò)成功率進(jìn)行對(duì)比.廣告測(cè)試總數(shù)為測(cè)試廣告的頁(yè)面訪問(wèn)量,廣告請(qǐng)求成功為CDN端收到從客戶端成功發(fā)出廣告請(qǐng)求,廣告展示成功為投放的廣告成功在客戶端展示并通知CDN計(jì)數(shù).首先是測(cè)試廣告反屏蔽方案對(duì)瀏覽器發(fā)出廣告請(qǐng)求的效果,結(jié)果如表1所示.在未開(kāi)啟反屏蔽功能時(shí),投放的1438個(gè)廣告測(cè)試樣例,在中間件處只收到了1209個(gè)廣告請(qǐng)求;而開(kāi)啟反屏蔽功能時(shí),投放的1495個(gè)廣告測(cè)試樣例,在中間件處收到了1484個(gè)廣告請(qǐng)求.測(cè)試廣告的請(qǐng)求成功率從84.08%提升至99.26%,如圖6 所示,開(kāi)啟廣告反屏蔽功能對(duì)廣告成功發(fā)出請(qǐng)求的提升效果十分顯著.然后測(cè)試廣告反屏蔽方案對(duì)廣告展示的效果,結(jié)果如表2所示.在未開(kāi)啟反屏蔽功能時(shí),投放的2967個(gè)廣告測(cè)試樣例,只有2336個(gè)廣告展示成功;在開(kāi)啟反屏蔽功能時(shí),投放的2816個(gè)廣告測(cè)試樣例,中間件處收到了2664個(gè)廣告展示成功的信號(hào);測(cè)試廣告的展示成功率從78.73%提升至94.60%,如圖7所示,開(kāi)啟廣告反屏蔽功能后廣告的展示成功率大幅度提升.雖然使用反廣告屏蔽后的展示成功率有明顯提升,但還是有5.4%的失敗率,這是因?yàn)閺V告攔截器對(duì)廣告內(nèi)容的隱藏方式復(fù)雜多樣,對(duì)元素屬性名的修改不足以應(yīng)對(duì)廣告攔截器的所有檢測(cè)方法.最后進(jìn)行實(shí)際上線測(cè)試,表3為分別上線三天抽取10%的對(duì)比結(jié)果.廣告請(qǐng)求量的提升為16.25%,廣告展示量的提升為11.53%,結(jié)果表明啟用廣告反屏蔽方案對(duì)廣告請(qǐng)求和成功展示有著明顯的提升.根據(jù)2017年百度聯(lián)盟分成160億收入初略估計(jì),使用廣告反屏蔽方案能提升將近25億廣告收益.
圖6 廣告請(qǐng)求對(duì)比測(cè)試 圖7 廣告展示對(duì)比測(cè)試
表1 廣告請(qǐng)求對(duì)比測(cè)試
Table 1 Ad request contrast test
反屏蔽狀態(tài)廣告請(qǐng)求成功數(shù)廣告測(cè)試總數(shù)關(guān)閉12091438開(kāi)啟14841495
表2 廣告展示對(duì)比測(cè)試
Table 2 Ad display contrast test
反屏蔽狀態(tài)廣告展示成功數(shù)廣告測(cè)試總數(shù)關(guān)閉23362967開(kāi)啟26642816
表3 上線三天對(duì)比測(cè)試(10%流量)
Table 3 On-line three-day comparison test (10% flow)
反屏蔽狀態(tài)廣告請(qǐng)求量廣告展示量關(guān)閉477265143602開(kāi)啟554830158769提升比例16.25%11.53%
廣告是互聯(lián)網(wǎng)收入的重要支柱,廣告攔截器的介入打亂了原有的用戶與網(wǎng)站之間的商業(yè)模式.廣告攔截器的使用用戶的持續(xù)增加,讓網(wǎng)站采用反廣告攔截的比例也快速增長(zhǎng).據(jù)2018年的檢測(cè)結(jié)果表明,超過(guò)30%的用戶使用了廣告攔截器來(lái)清除網(wǎng)站投放的廣告.這讓依賴廣告收入的互聯(lián)網(wǎng)產(chǎn)業(yè)損失慘重,所以廣告供應(yīng)商也亟需尋求一種有效的反廣告攔截技術(shù).廣告行業(yè)模板復(fù)雜,種類多樣,要從廣告服務(wù)器端直接進(jìn)行改革則代價(jià)龐大,難以實(shí)施.
本文開(kāi)發(fā)了一個(gè)不需要廣告服務(wù)器介入的通用廣告反屏蔽系統(tǒng),可以通過(guò)瀏覽器端和中間件的配合完成對(duì)抗廣告攔截器.本系統(tǒng)相較于使用WebSocket的方式繞過(guò)廣告攔截器的檢查更為有效,當(dāng)廣告攔截器增加了對(duì)WebSocket的檢測(cè)后適用WebSocket的方法就失效.而本系統(tǒng)是針對(duì)廣告攔截器的原理,對(duì)資源請(qǐng)求進(jìn)行加密,對(duì)廣告元素屬性進(jìn)行隨機(jī)來(lái)對(duì)抗廣告攔截器對(duì)廣告資源的識(shí)別.WebRanz系統(tǒng)采用的方法的核心思想與本系統(tǒng)一致,不過(guò)WebRanz系統(tǒng)部署在服務(wù)器端,需要對(duì)服務(wù)器端的代碼做大幅度修改.本系統(tǒng)部署在中間件,可靈活的應(yīng)用于各種廣告模板,兼容性更好.
廣告反屏蔽系統(tǒng)目前應(yīng)用于百度聯(lián)盟廣告反屏蔽業(yè)務(wù),對(duì)比測(cè)試廣告請(qǐng)求和廣告展示的結(jié)果表明廣告反屏蔽系統(tǒng)應(yīng)用于目前的廣告攔截效果顯著.實(shí)際的上線三天的對(duì)比測(cè)試結(jié)果表明反屏蔽系統(tǒng)給百度聯(lián)盟的廣告展示成功率帶來(lái)了大幅度提升,給公司的廣告業(yè)務(wù)帶來(lái)了巨大的收益提升.由于反廣告屏蔽系統(tǒng)應(yīng)用于中間件系統(tǒng),適用于當(dāng)前絕大部分網(wǎng)站結(jié)構(gòu),可方便進(jìn)行大規(guī)模拓展部署,具有良好的發(fā)展前景.