digital 千里眼 @abp_jp

アナログな日常とデジタルの接点

Privoxy カスタムフィルタ追加

長くなり過ぎるので、前月以前の更新履歴は削除してます

Privoxy + Tor 使ってます?

自分の個人情報は自分で防御する時代です
一度漏洩してしまったら回収するのは不可能なんですから...orz

本日は Privoxy でカスタムフィルタを作成したので簡単に紹介

カスタムフィルタいろいろ

  • フィルタ型プロキシのPrivoxy。Link Killer 以外にいろいろ書いてみた
  • 正規表現ばかりなので簡単な解説も付けときました(ドット文字をエスケープするの忘れずに...)
  • 使い方は user.filter に追記して user.action で呼び出すようにするだけです(詳しくはこちら
  • インデントしてる行に条件を追加して設定します
  • インデントいている行の行末に注目。¥ は改行をエスケープ。その前にある ¦ は条件を複数指定するための or を意味する

2008-10-12 追加

リンクのテキストを指定して消す:link-killer2

更新日 更新内容
2009-01-01 Update デリミタとして '\b' を追加した
2009-01-12 Update '\b' はアンダーバーを単語の一部だと見なすため、単語境界の条件としてアンダーバーを手動追加した
2009-01-13 update \b を使ったのはまずかった。URLエンコードで意図しない %ads とかに一致してしました...orz
●(?:_¦\b) (?: _ ¦ - ¦ / )
2009-01-23 update デリミタ(区切り文字)にシングルとダブルのコーテーション('")を追加した
● (?:_ ¦ - ¦ /) (?:_ ¦ - ¦ / ¦ " ¦ ')
2009-04-02 update デリミタ(区切り文字)にスペース相当とドット(¥s¥.)を追加した
● (?:_ ¦ - ¦ /) (?:_ ¦ - ¦ / ¦ " ¦ ' ¦ ¥s ¦ ¥. )
2009-04-02 update OR 条件を改行して羅列した場合、最後だけ ¦ を省く必要があるが忘れやすい。このミスを避けるため最後にダミー条件を設定した
● ____ending____condition____dammy____ ¥
################################################################################
#
# link-killer2: Remove annoying anchor tags by text node
#
#################################################################################
FILTER: link-killer2 Remove annoying anchor tags by text node
s@ <a[^>]+>[^<]*(?:                                    \
    (?:_|-|/|"|'|\s|\.)pr(?:_|-|/|"|'|\s|\.)         | \
    (?:_|-|/|"|'|\s|\.)ads?(?:_|-|/|"|'|\s|\.)       | \
    ____ending____condition____dammy____               \
)[^<]*</a[^>]*>                                        \
@ \
@igsUx
  • リンクのアンカー(a)タグに含まれるテキストを指定して削除します
  • 上の例では [PR] のようなテキストが含まれるリンクを削除

広告やアクセス解析スクリプトを属性で指定して消す:script-killer

更新日 更新内容
2009-01-01 Update デリミタとして '\b' を追加した
2009-01-12 Update '\b' はアンダーバーを単語の一部だと見なすため、単語境界の条件としてアンダーバーを手動追加した
2009-01-13 update \b を使ったのはまずかった。URLエンコードで意図しない %ads とかに一致してしました...orz
●(?:_¦\b) (?: _ ¦ - ¦ / )
2009-01-23 update デリミタ(区切り文字)にシングルとダブルのコーテーション('")を追加した
● (?:_ ¦ - ¦ /) (?:_ ¦ - ¦ / ¦ " ¦ ')
2009-04-02 update デリミタ(区切り文字)にスペース相当とドット(¥s¥.)を追加した
● (?:_ ¦ - ¦ /) (?:_ ¦ - ¦ / ¦ " ¦ ' ¦ ¥s ¦ ¥. )
2009-04-02 update OR 条件を改行して羅列した場合、最後だけ ¦ を省く必要があるが忘れやすい。このミスを避けるため最後にダミー条件を設定した
● ____ending____condition____dammy____ ¥
################################################################################
#
# script-killer: Remove annoying script tags by attributes like src
#                (Recursive script tag is NOT supported)
#
#################################################################################
FILTER: script-killer Remove annoying script tags by attributes like src
s@<script[^>]+(?:                                                      \
    (?:_|-|/|"|'|\s|\.)pr(?:_|-|/|"|'|\s|\.)                         | \
    (?:_|-|/|"|'|\s|\.)ads?(?:_|-|/|"|'|\s|\.)                       | \
    \.googlesyndication\.com/(?:[^/]+/)*(?:pagead/)?show_ads\.js     | \
    rank.*\.js                                                       | \
    (?:_|-|/|"|'|\s|\.)ad\.js                                        | \
    \baz\.trackword\.net/                                            | \
    ____ending____condition____dammy____                               \
)[^>]*(?:>.*</script[^>]*>|/>)                                         \
@ \
@igsUx
  • 広告スクリプトアクセス解析スクリプトを削除します
  • script タグに含まれる src 属性の URL (の一部)を指定
  • 滅多にありませんが、script タグの中に他のタグが含まれるようなケースでは使えません

指定したインラインフレームを属性で指定して消す:iframe-killer

更新日 更新内容
2009-01-01 Update デリミタとして '\b' を追加した
2009-01-12 Update '\b' はアンダーバーを単語の一部だと見なすため、単語境界の条件としてアンダーバーを手動追加した
2009-01-13 update \b を使ったのはまずかった。URLエンコードで意図しない %ads とかに一致してしました...orz
●(?:_¦\b) (?: _ ¦ - ¦ / )
2009-01-23 update デリミタ(区切り文字)にシングルとダブルのコーテーション('")を追加した
● (?:_ ¦ - ¦ /) (?:_ ¦ - ¦ / ¦ " ¦ ')
2009-04-02 update デリミタ(区切り文字)にスペース相当とドット(¥s¥.)を追加した
● (?:_ ¦ - ¦ /) (?:_ ¦ - ¦ / ¦ " ¦ ' ¦ ¥s ¦ ¥. )
2009-04-02 update OR 条件を改行して羅列した場合、最後だけ ¦ を省く必要があるが忘れやすい。このミスを避けるため最後にダミー条件を設定した
● ____ending____condition____dammy____ ¥
################################################################################
#
# iframe-killer: Remove iframe tags by attributes like src
#                (Recursive iframe tag is NOT supported)
#
#################################################################################
FILTER: iframe-killer Remove all iframe tags
s@<iframe[^>]+(?:                                       \
    (?:_|-|/|"|'|\s|\.)pr(?:_|-|/|"|'|\s|\.)         |  \
    (?:_|-|/|"|'|\s|\.)ads?(?:_|-|/|"|'|\s|\.)       |  \
    ____ending____condition____dammy____                \
)[^>]*(?:>.*</iframe[^>]*>|/>)                          \
@ \
@igsUx
  • インラインフレームを削除します
  • src 属性等の URL (の一部)で削除対象を指定
  • 滅多にありませんが、iframe タグの中に他のタグが含まれるようなケースでは使えません

属性で指定したdivを消す:div-killer

更新日 更新内容
2009-01-01 Update デリミタとして '\b' を追加した
2009-01-12 Update '\b' はアンダーバーを単語の一部だと見なすため、単語境界の条件としてアンダーバーを手動追加した
2009-01-13 update \b を使ったのはまずかった。URLエンコードで意図しない %ads とかに一致してしました...orz
●(?:_¦\b) (?: _ ¦ - ¦ / )
2009-01-23 update デリミタ(区切り文字)にシングルとダブルのコーテーション('")を追加した
● (?:_ ¦ - ¦ /) (?:_ ¦ - ¦ / ¦ " ¦ ')
2009-01-23 update overture を追加した
2009-03-22 update ブロック対象の div が <div></div>のようにテキストノードさえ持たない場合、</div> の更に次の </div> まで div 要素を削除してしまう誤動作を修正
● )[^>]*>.+]*> \ ⇒ )[^>]*>.*]*> \
2009-04-02 update デリミタ(区切り文字)にスペース相当とドット(¥s¥.)を追加した
● (?:_ ¦ - ¦ /) (?:_ ¦ - ¦ / ¦ " ¦ ' ¦ ¥s ¦ ¥. )
2009-04-02 update OR 条件を改行して羅列した場合、最後だけ ¦ を省く必要があるが忘れやすい。このミスを避けるため最後にダミー条件を設定した
● ____ending____condition____dammy____ ¥
################################################################################
#
# div-killer: Remove annoying div tags by attributes
#             (Recursive div tag is NOT supported)
#
#################################################################################
FILTER: div-killer Remove annoying div tags by attributes
s@<div[^>]*(?:                                      \
    (?:_|-|/|"|'|\s|\.)pr(?:_|-|/|"|'|\s|\.)      | \
    (?:_|-|/|"|'|\s|\.)ads?(?:_|-|/|"|'|\s|\.)    | \
    \sclass="adsbygoogle"                         | \
    \sclass="antenapr1"                           | \
    \sclass="AMN-large-banner"                    | \
    \sclass="b-rtxt"                              | \
    \sclass="box_ct"                              | \
    \sclass="ji"                                  | \
    \sclass="overture                             | \
    \sid="mainPrBanner"                           | \
    \sid="rrec"                                   | \
    \sid="ttl-techtarget"                         | \
    \sstyle="text-align:center;font-size:13px;"   | \
    ____ending____condition____dammy____            \
)[^>]*>.*</div[^>]*>                                \
@ \
@igsUx
  • div タグを削除
  • 対象は div タグの属性で指定する
  • div タグの中に更にタグが含まれるようなケース(入れ子)では使えません

Adblock Plus や Remove It Permanently(RIP) で消せない広告を消す

2008-10-24 項目追加
最近では(Adblock や RIP の広告ブロックを警戒してるのか)属性がまったくついていないページもよく見かけますが、ここで諦めずに Privoxy の強みを生かして消していくカスタムフィルタを追加します

更新日 更新内容
2009-01-01 Update デリミタとして '\b' を追加した
2009-01-12 Update '\b' はアンダーバーを単語の一部だと見なすため、単語境界の条件としてアンダーバーを手動追加した
2009-01-13 update \b を使ったのはまずかった。URLエンコードで意図しない %ads とかに一致してしました...orz
●(?:_¦\b) (?: _ ¦ - ¦ / )
2009-01-23 update デリミタ(区切り文字)にシングルとダブルのコーテーション('")を追加した
● (?:_ ¦ - ¦ /) (?:_ ¦ - ¦ / ¦ " ¦ ')
2009-03-09 update ● コメント開始語に 'begins?' を追加
● デリミタに半角スペース '\s' を追加
● デリミタの繰り返し '+' を追加
2009-04-02 update デリミタ(区切り文字)にスペース相当とドット(¥s¥.)を追加した
● (?:_ ¦ - ¦ /) (?:_ ¦ - ¦ / ¦ " ¦ ' ¦ ¥s ¦ ¥. )
2009-04-02 update OR 条件を改行して羅列した場合、最後だけ ¦ を省く必要があるが忘れやすい。このミスを避けるため最後にダミー条件を設定した
● ____ending____condition____dammy____ ¥
################################################################################
#
# html-comment-killer: Remove HTML comments by text in the tags
#
################################################################################
FILTER: html-comment-killer Remove HTML comments by text in the tags
s@<!--[^\-]*(?:                                                                           \
    (?:_|-|/|"|'|\s|\.)+(?:begins?|starts?)(?:_|-|/|"|'|\s|\.)+pr(?:_|-|/|"|'|\s|\.)+   | \
    (?:_|-|/|"|'|\s|\.)+pr(?:_|-|/|"|'|\s|\.)+(?:begins?|starts?)(?:_|-|/|"|'|\s|\.)+   | \
    (?:_|-|/|"|'|\s|\.)+(?:begins?|starts?)(?:_|-|/|"|'|\s|\.)+ads?(?:_|-|/|"|'|\s|\.)+ | \
    (?:_|-|/|"|'|\s|\.)+ads?(?:_|-|/|"|'|\s|\.)+(?:begins?|starts?)(?:_|-|/|"|'|\s|\.)+ | \
    -AD                                                                                 | \
    ____ending____condition____dammy____                                                  \
)[^\-]*-->.+                                                                              \
<!--[^\-]*(?:                                                                             \
    (?:_|-|/|"|'|\s|\.)+ends?(?:_|-|/|"|'|\s|\.)+pr(?:_|-|/|"|'|\s|\.)+                 | \
    (?:_|-|/|"|'|\s|\.)+pr(?:_|-|/|"|'|\s|\.)+ends?(?:_|-|/|"|'|\s|\.)+                 | \
    (?:_|-|/|"|'|\s|\.)+ends?(?:_|-|/|"|'|\s|\.)+ads?(?:_|-|/|"|'|\s|\.)+               | \
    (?:_|-|/|"|'|\s|\.)+ads?(?:_|-|/|"|'|\s|\.)+ends?(?:_|-|/|"|'|\s|\.)+               | \
    -/AD                                                                                | \
    ____ending____condition____dammy____                                                  \
)[^\-]*-->                                                                                \
@ \
@igsUx
  • 商業サイトには管理のためにHTMLコメントで広告タグを挟んであるケースが多い
  • 例えば、<!-- ad_start --> で始まり、<!-- ad_end --> で終わるようなケース
  • このHTMLコメントを丸ごと消します

入れ子になった div タグを消す

汎用フィルタにするの面倒だったんで個別対応...orz

################################################################################
#
# custom-div-killer1: Remove specific div tags
#
#################################################################################
FILTER: custom-div-killer1 Remove annoying div tags
s@ <div[^>]+ \
    class="parts\d{2}" \
[^>]*>(?:.*</div[^>]*>){3} \
@ \
@igsUx
  • class属性が"parts01"のようなdivを消す(この例では数字は2桁とした)
  • いくつdivが入れ子になっているかを数え(=divを閉じた回数)、その数を指定(上の例では{3})

説明わかりにくくてすんません...orz