digital 千里眼 @abp_jp

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

Privoxy アクションファイル( user.action )のパターン指定で気をつけたいこと

知らない人も多いと思うので簡単に紹介しとくと

Privoxy は Proxy で以下の特徴を持ちます
  • キャッシュ機能を持たない
  • フィルタ機能が強力でリクエストとレスポンス両方を加工することができる
  • tor と組み合わせて使うことで匿名性を高めることができる
  • 広告を遮断することができる
  • HTML を書き換えることができる
  • ブラウザを偽装することができる
  • その他いろいろ...
アクションファイルとは( user.action )

どのフィルタ( default.filter, user.filter )をどの URL に適用するかを定義したファイルです

{ +filter{your_filter_name} } # <= これがフィルタ
example.com/regular/expression/after/(?:the/)?slash\.js # <= これがパターン

これは、

  1. フィルタファイル内(*.filter)で定義された「your_filter_name」フィルタを有効(+)にする
  2. 適用 URL パターンのドメイン名は FQDN で「example.com」。パスは正規表現で「/regular/expression/after/(?:the/)?slash\.js」


さて、やっとここで本題に入ります

パターンはフィルタを適用する URL

かみ砕いて説明しましょう

パターン = ドメイン(省略可能) + パス(省略可能)

例えば、example.com/regular/expression/after/(?:the/)?slash\.js なら

ドメイン部(Privoxy 独自) パス(正規表現POSIX 1003.2)前方一致
example.com /regular/expression/after/(?:the/)?slash\.js
パス指定で気をつけること
  • ルート(/)は必須
  • 前方一致

引っかかりやすいとこ

例題 「/」スラッシュに一致するパターンは?
正解 ドメイン + パターン=省略 + ルート
前方一致だから全てのパスに一致

問題は「ドメイン部」...独特すぎる!

  • ワイルドカード(*)使用可。?もWindowsで使うのと同じで任意の一文字
  • 正規表現の文字クラス([0-9a-zA-Z]みたいなの)だけが使える
  • ポート番号指定(例えば8000番を意味する「:8000」)を除き「ドメイン部」は部分一致ではない

ドメイン部」が部分一致じゃない例 ⇐ これにハマった

「ad.example.com」:この場合、「pr.ad.example.com」に一致しない
.ad.example.com」と書けばOK...orz(ad.example.com にも一致するのが不思議)
つまり、

これが言いたかった