學習廣告過濾

2021-07-05 04:35:33 字數 4480 閱讀 9455

hardcoded rule,直接寫個**,可以使用

wildcasts.

exception rules: 「@@這個**的所有內容都不

block

標記規則的開頭和結尾:

|, 「swf|」, 匹配結尾是

swf的

url.

「abc」 等價於「

*abc*」

過濾特定網域名稱的內容:「

||example.com/banner.gif」可以過濾

分割符,

^, 可以表示:

注釋:!

filter options

格式:「規則

$option1,option2」

規則部分

可以使用正規表示式,但是鑑於效率,最好少用。

基本格式

##element_name.class_name 限定元素名和

class名

##element_name 只指定元素名

##element_name#id_name 限定元素名和

id##*.class_name 只限定

class名 指定

domain

domain1.com,domain2.com,domain3.com##*.sponsor

可以隱藏多個

domain的

class是

sponsor的元素。

domain.com可以遮蔽該

domain

通過

attribute選擇元素

##table[width="80%"]

##div[title*="adv"] title包含

adv

##div[title^="adv"][title$="ert"]title以

adv開頭,以

ert結尾

##table[width="80%"][bgcolor="white"]

exception rule

規則

1:

##div.textad

規則

2:

example.com#@#div.textad

上述

2者等價於:

~example.com##div.textad

filter rules可以使用

@@example.com

hidden rules:問題是上述靠

@@指定的例外規則是否也會阻止

hiddenrules.?搭伺服器測試一下。

發現過濾規則檔案裡

:a.jpg並不能在第一次載入時把

a.jpg給過濾掉,

debug一下。

也不起作用

。難道是資源被預載入了?

log裡發現廣告過濾沒有起作用。試著寫乙個簡單的

abp.txt測試一下原因。

發現,a.jpb被預載入了,說明

oracle裡面有他的記錄。在第一次載入這個網頁時,不應該載入他,也不應該把它寫入到

oracle記錄裡。看一下。廣告過濾的檢查和向

oracle裡面

report資料的順序,按道理說應該是廣告過濾在先吧。

結果發現在進行

adblock檢查之前

a.jpb就被加入了

oracle。當下回載入網頁的時候,就會首先預載入

a.jpg,並且因為此時沒有

document例項

,所以也沒法對預載入的資源進行

adblock檢查,於是該資源就被成功載入到

memcache裡了。當

a.jpg於是又發現

memcache裡面有,就可以直接使用了,不會走到

resourceloader裡面,也就不會進行

adblock檢查了。導致的結果是這個被載入了而且被顯示出來了。結論:第一次沒有預載入資料的情況下載入網頁時,應該先進行

adblock檢查。檢查通過的資源,才記錄到

oracle資料庫裡。

每個規則占用一行字串,拿出來解析,解析的流程:

先根據資源的

url,domain,shortcuts從所有規則裡挑出一些可能相關的規則,然後用著寫規則去檢查這個資源。

在若干各規則匹配的時候,每個規則檢查的結果分三種情況:

passed, 這個規則允許該資源,優先順序最高

filtered, 這個規則禁止該資源,還得看是否有規則允許該資源。

na, 無關的

具體每個規則的匹配流程:

abpfilterrule::shouldbefiltered(const kurl& baseurl, constkurl& rawresourceurl, elementtype type)

這個函式一步一步判斷本規則的某些原則是否可以應用於這個資源位址,判斷是有順序的:

乙個規則,可能有自己的限定範圍,即只對滿足特定要求的**產生效果,比如他可能只對第三方的**,或者只對

image型別的元素產生作用。那麼如果資源**和**是同一方的,或者這個資源不是,那麼就不用再針對這個原則繼續分析這個資源。因為這個原則對於這個資源來說沒有意義。

先判斷本規則的

firstparty/third party原則是否和這個資源相符,如果本規則應用於

thirdparty, 恰巧這個資源是

thirdparty資源,那麼目前看來是

match的。可以繼續分析,如果不

match,就直接

matched= false. 這樣函式就返回

na了。

然後判斷

elementtype,

image? css? script?...

然後判斷

domain的限制

,是否必須是某個

domain?...

最後判斷正規表示式是否匹配

.這幾個原則,有乙個不匹配,那麼本原則就無法應用於這個資源。就返回

na,如果本規則可以通過上述檢查,那麼本規則對這個

resource具有影響,要麼

passed,要麼

filtered.

resourcefetcher::requestresource()

resourceloader::start()

都可以。但是

resourcefetcher較前一些,可以提前決定是否過濾。如果需要過濾,那麼就可以不用建立

resourceloader.而且也不會把這個資源加入資源**的資料庫裡。如果加入了資源**的資料庫裡就會導致下一次載入時,會在

document建立之前直接預載入應該被過濾掉的資源。所以推薦在

resourcefetcher裡加入檢查點。

paip 廣告過濾系統 php 實現

paip.廣告過濾系統 php 實現 作者attilax 艾龍,email 1466519819 qq.com logo 過濾 html 過濾 html 過濾 有基於dom的delete過濾,string 正規表示式 替換更加簡單的.rewriterule htm process.php?file ...

Chrome 過濾廣告外掛程式暫替辦法

由於chrome暫無廣告過濾外掛程式,我們只能通過其他方法是實現google chrome的廣告過濾。這裡我們需要用到privoxy這款軟體!由於privoxy是通過本地 來實現廣告過濾的,所以用chrome也通過privoxy實現廣告過濾。如果你覺得privoxy自身的過濾配置滿足不了需求,可以文...

阿呆喵廣告過濾 v1 9 0 1 官網版

阿呆喵廣告過濾 v1.9.0.1 官網版 軟體大小 2.96mb 軟體語言 簡體中文 軟體類別 網路其它 軟體授權 官方版 應用平台 win8 win7 winxp 阿呆喵廣告過濾軟體介紹 基於開源privoxy引擎,並在其基礎上進行了大量的重構和創新,無論是在系統資源占用,軟體相容性方面,還是在廣...