uBlock Origin フィルター覚書(書き方・サンプル)

投稿日 2021/09/12 更新日 2021/11/19

uBlock Origin のフィルターに関する覚書です。

はじめに

uBlock Origin (以降uBO) は、「広告ブロッカー」として導入している方がほとんどだと思います。ですが uBO は、広域スペクトルブロッカーです。これは、単なる「広告ブロッカー」としても動作することができる、より強力なブロッカーです。

uBO のフィルターは、UserScript や UserCSS に類するツールの一種であり、フィルターを理解して使用することでより良いウェブ環境を簡易に構築できます。

フィルターの種類

uBOのフィルターには、次の種類があります。

コメント - 共通

記号概要
!コメント
!#if [condition]!#if [condition]
!#include [file name]!#include [file name]

サンプル

! コメント

!#if false
ブロックコメント
!#endif

静的ネットワークフィルター (static network filtering)

書式

  • [対象URL] + ($ + [オプション])
    • 適用
  • @@ + [対象URL] + ($ + [オプション])
    • 例外(適用を打ち消す)

※[対象URL]は、static extended filtering の[ドメイン名]とは大きく異なります。
※[対象URL]は、||(domain name anchor)でドメイン名を指定できます。
※[対象URL]は、ドメイン名だけでなく、URLを指定できます。
※[対象URL]は、*(ワイルドカード)を使用できます。
※[対象URL]は、複数のURLを指定することはできません。
※[オプション]には、カンマ(,)区切りで複数のオプションを設定できます。

主な記号の意味

記号概要
||ドメイン単位の指定(domain name anchor)
@@例外ルール
*すべてのURL
^区切り
$オプション

オプション

リクエストを制限する

オプション概要
document, docウェブページを制限する
subdocument, frame埋め込みページを制限する
image画像ファイルを制限する
scriptスクリプトファイルを制限する
stylesheet, cssCSSスタイルシートファイルを制限する
fontフォントファイルを制限する
mediaメディアファイルを制限する
objectブラウザプラグインによって処理されるコンテンツを制限する
xmlhttprequest, xhrXMLHttpRequest or Fetch API を制限する
pingnavigator.sendBeacon()を制限する
websocketWebSocketを制限する
webrtcWebRTCを制限する
popup, popunderポップアップウィンドウを制限する
otherその他 (上記に含まれないリクエスト)を制限する

ドメインで制限する

オプション概要
domain=指定したドメインにのみ適用されるようにフィルターを制限する
first-party, 1pファーストパーティのリクエストを制限する
third-party, 3pサードパーティのリクエストを制限する
strict1p厳格なファーストパーティのリクエストを制限する
strict3p厳格なサードパーティのリクエストを制限する
denyallow=default-deny / allow-exceptionally 機能

Content-Security-Policy を設定する

オプション概要
csp=CSPを設定する
inline-scriptCSPを設定して、インラインスクリプトを無効化する
inline-fontCSPを設定して、インラインフォントを無効化する

リダイレクトを設定する

オプション概要
redirect=リダイレクトを作成する
redirect-rule=静的なリダイレクトを作成する
match-case$redirect=と共に設定すると大文字小文字を区別する
redirect用の資源概要
noneリダイレクトを無効にする
empty空の応答にリダイレクトする
click2load.html埋め込みページ用。クリックすると元ページが読み込まれる
1x1.gif
2x2.png
3x2.png
32x32.png
noop.html
noop.js
noop.txt
noop-0.1s.mp3
noop-1s.mp4

空のリダイレクトリソース

例外フィルター用のオプション

オプション概要
elemhide, ehide対象ページのすべてのコスメティックフィルタリングを無効化する
specifichide, shide対象ページの一致するコスメティックフィルタリングを無効化する
generichide, ghide一般的な一致するコスメティックフィルタリングを無効化する
cname

その他のオプション

オプション概要
all$popup,document,inline-font,inline-scriptと同等
badfilter既存のフィルターを無効化する
important他の例外フィルターを無視する
removeparam=ネットワーク要求前にクエリ文字列からパラメータを削除する
header=応答ヘッダーを確認して制限する

サンプル

! 例:ドメイン単位の指定
||example.com^
||192.168.1.1^

! 例:例外ルール
@@||example.net^

! 例:すべてのURL
! すべてのサードパーティリクエストをブロックする
*$third-party
*$script
*$script,inline-script

! 例:ファイル名
^example.html^
^example.js^

! 例:URLの指定
http://example.com^
https://example.com/^
https://example.com/test.html^$document
! ※トップページ以外のページは、オプションを明示的に指定する必要があります

! 例:HOSTSファイル
example.com


! 例:ページリクエストを制限する
||example.com^$document

! 例:サードパーティリクエストを制限する
||example.com^$third-party

! 例:スクリプトとインラインスクリプトを制限する
||example.com^$script,inline-script

! 例:ワーカーをCSPを介して制限する
||example.com^$csp=worker-src 'none'

静的拡張フィルタリング (static extended filtering)

書式

  • [ドメイン名(ホスト名)] + ## + [指定]
    • 適用
  • [ドメイン名(ホスト名)] + #@# + [指定]
    • 例外(適用を打ち消す)

※[ドメイン名]は、static network filtering の[対象URL]とは大きく異なります。
※[ドメイン名]は、URL(特定のページだけ)を指定することはできません。
※[ドメイン名]は、カンマ(,)区切りで複数指定できます。
※[ドメイン名]は、一部の機能を除いて*(ワイルドカード)を使用できます。
※[ドメイン名]は、サブドメインを省略でき、サブドメインにも適用されます。
※[指定]には、[CSSセレクタ]/[化粧品フィルター]/[アクション演算子]/[スクリプトレットインジェクション]を指定できます。

主な記号の意味

記号概要
##要素非表示
#@#要素非表示の例外ルール
##^HTMLフィルター
#@#^HTMLフィルターの例外ルール
##+jsスクリプトレットインジェクション(スクリプト挿入)
#@#+jsスクリプトレットインジェクションの例外ルール

※要素非表示は、対象要素に「display: none !important;」のCSSを適用します。
※HTMLフィルターは、対象要素をブラウザ解析前にドキュメントから要素を削除します。
 ブラウザ解析後、動的に要素を作成した場合、要素は削除されません。
※HTMLフィルター以外の適用タイミングは、ブラウザ解析後です。
 そのため、要素非表示が遅れて一瞬表示されることがあります。
 HTMLフィルターは、ブラウザ解析前に要素を削除するため、表示されることはありません。
※スクリプト挿入は、特定のJavaScriptコードをページに挿入します。
 自由なJavaScriptを挿入できるわけではありません。
 挿入可能なコードは、リソースライブラリ から確認できます。

サンプル

! 例:要素非表示
example.com##h1

! 例:要素非表示の例外
example.com#@#h1

! 例:CSS セレクタを指定する
example.com###target
example.com##.target
example.com###parent .target

! 例:HTMLフィルター
example.com##^h1
example.com##^#target
example.com##^.target

! 例:コスメティックフィルター
example.com##body > div:has-text(Sponsored)
strikeout.me##body > div:has(img[alt="AdBlock Alert"])

! 例:スクリプトレットインジェクション
example.com##+js(noeval)

! 例:複数サイトの特定要素を非表示
example.com,example.net##h1

! 例:全サイトの特定要素を非表示(非推奨)
*##h1

広告ブロック以外の使用例

! Google検索結果から、特定サイトを除外
www.google.com,www.google.co.jp###search .g:has(a[href*="://example.com/"])

! スクリプトの実行阻止
||example.com^$script,inline-script

! ワーカーの実行阻止
||example.com^$csp=worker-src 'none'

! サードパーティリクエストの制限
||example.com^$third-party

! 個別要素の非表示
!   ポップアップ全般
!   GDPR関連
! Twitterのプロモーションを非表示
! 特定サイトへのリンクを非表示
! コピペガードの無効化
! アンチAdBlocker対策

備考

uBlocklist

Google検索結果から、特定サイトを除外する専用の拡張機能もあります。

※Bing/DuckDuckGoなどの他検索エンジンも合わせてブロックできます。

公式な解説ページ(英語)

他の解説ページ

コメント