Naoko 4.5 (リリースバージョン)の最終修正点
* 特定の条件下で、304 リプライが持続的接続の同期を失わせる問題を修正しました。
(たとえば、ヘッダがウェブページ中に現れてしまう可能性がありました。)
* proxcert.pem を更新しました。
* リストが無限に繰り返すのを防ぐためのチェックを追加しました。
* テクスチャが見つからない場合の、フィルタマージのバグを修正しました。
* POST URL をファイルにリダイレクトした後の問題を修正しました。
(ポストされたデータは、それが使用されなかった場合でも「消費」
されません。)
Naoko 4.5 (beta 2003/04/18) の更新点
* .pinfo で表示されるブロックファイルや URL リストを HTML エスケープ
するようにしました。タグが含まれていた場合に問題が起こるのを防ぐため
です。
* 変数は記憶されるようになり、マッチに失敗した場合にリセットされるように
なりました。うまくいけば、マッチングの間にそれを読み出せるようにしつつ、
前のバージョンと同様にふるまわせることができると思います。
* ウェブフィルタが逆の順番でインポートされることはなくなりました。
* オーケー、これが新機能じゃないということはわかっていますが、でもローカル
ファイルに対するリクエストでログウィンドウが溢れかえっているのは事実です。
そこで、それを表示するかどうかのオプションを追加しました。これはデフォルト
では無効になっています。 :-)
* 設定ファイルに「PriorityBoost = TRUE/FALSE」フラグを追加しました。これは
実験的なものですが、true にした場合は、メインプログラムは通常のままで、
フィルタリングスレッドの優先度を高めます。これは、ブラウザが自身の優先度
を高めるせいで、Proxomitron に当てられる CPU タイムが足りなくなるような
場合に有効でしょう。またこのために、私は Proxomitron 自身を高い優先度で
走らせることは推奨しません。さもなくばスレッドの優先度が高すぎてしまう
でしょう。もしそうするのであれば、このオプションは無効にした方がいいで
しょう。
* 302 リダイレクトの扱いを少々変更し、Mozilla がより早く処理できるように
しました。(最近の Mozilla は、リダイレクトに HTML が含まれてない場合、
わずかな時間止まってしまうようです)
* 設定がロードされる際の、ヘッダフィルタの内部ソートを修正しました。
これでヘッダフィルタが通常よりもやや予想不能な順序で呼ばれるように
なります。:-) それでもなお、ヘッダフィルタが呼ばれる内部的な順番は
「公式に」無定義ということですから、ヘッダフィルタの順序には依存
しない方がいいでしょう。いつの日か、ヘッダについてもウェブフィルタと
同様に、ただソートするのではなく順序を決められるようになるかも
しれません。しかし今のところは、どのような順番で呼ばれるのかは
わからないという前提でいた方がいいでしょう。
* TST マッチは長さを厳密にチェックするようになりました。たとえば、
"foobar" という文字列が与えられた場合、$TST(var=foo???) はマッチ
しますが $TST(var=foo??) はマッチしません。これで値を厳密にテスト
するのが多少簡単になるでしょう。
* $DTM コマンドに "w" を追加し、曜日のチェックができるようになりました。
(これについて素晴らしい意見を述べてくれた ScoJo さんに感謝します。
おかげで、特定の時間や特定の曜日だけに有効になるフィルタを作れる
ようになりました。 :-)
$SET(today=$DTM(w))
$TST(today=(Sat|Sun))
Naoko 4.5 (beta 2003/04/12) の更新点
* http://local.ptron/.pinfo/ をお試しください。いろいろあります ^_^
(見た目は、html フォルダにある Info.css でカスタマイズすることが
できます。)
* windows のクリップボード経由でフィルタをインポート/エクスポートできる
ようになりました。ウェブフィルタやヘッダフィルタの上で右クリックすると、
コンテクストメニューからインポート/エクスポートオプションを選ぶことが
できます。
Export を選ぶと選択されたフィルタをクリップボードに書き出し、Import は
クリップボードのテキストからフィルタを読み込みます。フォーマットは
Proxomitron の設定ファイルと同じ形式です。
また、フィルタの併合ダイアログにも、ファイルからではなくクリップボード
から読み込むオプションがあります。設定ファイルにあるすべての設定を
ここからインポートすることができます。テキストだけでなくフィルタの
セクションヘッダが含まれていることを確認してください。
* NT/W2k/XP でログウィンドウにおけるクリップボードの挙動がよくなりました。
* Proxomitron はリクエスト前変数(pre-request variables)を使えるように
なりました。これはどこででも(たとえヘッダでも)セットすることができ、
後からチェックすることができます(たとえば実際の HTML で)。それぞれ
のリクエストで個別にセットするもので、他のページでセットされたもの
とは区別されます。
- 変数をセットするには...
$SET(variable=something)
- 変数をクリアするには...
$SET(variable=)
- 変数の値を取得するには...
$GET(variable)
- 変数の値をテストするには...
$TST(variable=match expression)
または単に...
$TST(variable)
これは変数の値が現在のテキストにマッチするかどうか調べるために
使えます。たとえば...
src="http://$TST(myhost)/"
これは文字通りのマッチであるということに注意してください(大文字と
小文字の違いは除きます)。つまり、変数の値はワイルドカードやその他
の検索表現としては扱われません。
数字の "\1 \2 \# ..." といった変数とは違って、$SET は名前の付いた変数
を呼ばれたその場で展開します(数字の変数では置換テキストで展開します)。
これは、名前の付いた変数の場合は自分自身をセットして展開することが
できるということを意味しています。たとえば...
$SET(foo=$GET(foo) more stuff) - "foo" の後ろに追加します
$SET(foo=more stuff $GET(foo)) - "foo" の前に追加します
$SET(foo=$GET(foo) \1) - "foo" の後ろに "\1" の値を追加します
$SET(foo=$GET(foo)$GET(bar)) - "foo" の後ろに "bar" の値を追加します
また、$TST は古き良き変数の \0 ... \9 でも使うことができ、次のような
面白い技を可能にします...
<\1\s * $TST(\1)>
これは次のようなものにはマッチしますが...
stuff
次のようなものにはマッチしません...
stuff
これを実現するために、Proxomitron が従来行ってきた変数にセットする方法を
大きく変更しなければなりませんでした。このベータでは、予期しない副作用が
出ないかどうか注意してください。特に、マッチの中で同じ変数を複数回使用
している場合には注意してください。Proxomitron は今まで、一度マッチした
変数は再びマッチするまで変更されないということを保証するため、最後の最後
まで変数のセットを待ってきました。現在では、マッチに失敗した場合、過去に
マッチした変数の値が消されてしまう可能性があります。しかし、実際にこれが
問題になるケースはそれほど見あたらないようですし、これはトレードオフの
価値があるのではないかと考えています。
速度に関して:
リストを呼ぶのと同様に、変数をテストする場合には多少スピードに影響が
あります。変数が呼ばれるたびにその名前を調べる必要が生じるので、
これを検索表現の一番最初にはもってこない方がいいでしょう...
遅い例: $TST(name=ayumu|osaka)
良い例: $TST(name=ayumu|osaka)
また、変数が多いほど調べるのに時間がかかるので、ある変数について
完了したことがはっきりしている場合には、次のようにしてクリアした
方が良いでしょう: $SET(foo=)
* 繰り返しの回数指定( "[a]+{0,500}" のような)は、範囲が 255 までに
制限されていましたが、65535 まで使えるようになりました。
* エラーメッセージは html フォルダにある "Errors.css" ファイルを
呼ぶようになりましたので、色やフォントをカスタマイズすることが
できます。
* システムトレイのツールチップに設定名が表示されるようになりました。
(リクエストにお答えして ;-)
* SSL pass-thru 接続を確立するために使われる CONNECT メソッドを
フィルタすることができるようになりました。これで OpenSSL を使用
しなくても最小限のフィルタリングが可能になりました(基本的な
サイトブロックやバイパスリスト用のホスト名マッチなど)。
また、CONNECT ヘッダがログウィンドウで見られるようになりました。
(これは proxy によって使われるものであって、リモートサイトに
伝えられるものではないということは覚えておいてください)
* $WESC が閉じ括弧をエスケープしないバグを修正しました。
* 新しい DOM banner/container killer フィルタを追加しました。
* multi-part (PUSH) の content type はデフォルトではフィルタ
しないようになりました。
* 更新された SSLeay/OpenSSL ライブラリを使用するようになりました。
また、リモートサイト証明書の基本的な正当性チェックを追加しました。
詳細については readme.txt を参照してください。
* テストウィンドウで、マッチが1文字だった場合にフィルタされない
ことがあるバグを修正しました。
* $LOG() コマンドは、ログウィンドウが閉じていた場合にはそれを
開けるようになりました。色を表す文字の前に、"!" を入れてください...
$LOG(!GLog Something green)
* "read overflow" バグを修正しました (今度は本物になりました ;-)
* "Content-Type: Fix MIME types based on URL" フィルタで、"&" が
抜けていたのを修正しました。
* JavaScript フィルタを、 の後に挿入するように
修正しました(IE6 ではこちらの方が良いでしょう)。
* ポップアップフィルタを改良しました。現在は外部ファイルとして
html フォルダにある "WindowOpen.js" を使用します。
* $URL、$RESP、$IHDR、$OHDR、$TST は置換テキストでも使えるように
なりました(値を取り込むのに便利でしょう)。
* 追加された 最新の DOM banner blaster と container killer は
html フォルダにある "DomConKiller.js" を使用します。
* NT/Win2k/XP の環境で、長いコマンドでクラッシュする問題を修正しました。
* ログウィンドウで、長いエントリに関するバグを修正しました。
* 特定のおかしな HTTP ヘッダの取り扱いに関するバグを修正しました。
* SSL ソケットの再利用に関するバグを修正しました(たぶん)。
* \h は、次のような最後にスラッシュのないホスト名にもマッチするように
なりました。
"http://foo.com"
* Proxy advanced option はユーザー名だけでパスワードがない場合にも
対応しました。
* 設定ファイルのリロードは、debug フラグをクリアしないようになりました。
Naoko 4.4 の更新点
* KEYCHK コマンドを追加しました。これはフィルタ内でキー押下の組み合わせ
をチェックするのに使うことができます。他のマッチングテストと同じように
働き、フィルタの検索部、もしくは URL マッチで使うことができます。マッチ
が完了すると、KEYCHK はテストされているキーがその瞬間に押されていれば
"matched" を返します。ほとんどのキーは、その「シフトキーの押されてない」
値を用いることでテストすることができます。しかし、特殊なキーもキャラット
シンボル "^" で始めることでテストすることができます....
^C = CONTROL
^A = ALT
^S = SHIFT
^T = TAB
^F1 = ファンクションキー #1
^F2 = ファンクションキー #2
^32 = 仮想キーコード 32 (spacebar)
^65 = 仮想キーコード 65 ("A")
大文字と小文字を区別しないので、"^c" も "^C" も使うことができます。
複数のキーの組み合わせもテストすることができます。たとえば...
$KEYCHK(^A^S) = ALT+SHIFT
$KEYCHK(^C^F6) = CONTROL+F6
$KEYCHK(^AG) = ALT+G
$KEYCHK(^C^A^S) = CONTROL+ALT+SHIFT
キーボードで押すことのできるあらゆる組み合わせで働きます。他の特殊
キーも、もし Windows の仮想キーコードを知っていればテストすることが
できます ― これは 0-255 の数字です。たとえば、^2 はマウスの右ボタン
をテストします。
* ブロックファイルに LOGFILE オプションを追加しました。これをブロック
ファイルの最初に書き加えることで、Proxomitron に対して、その内容を
マッチングテストに使用したり、メモリにロードしたりしないように指示
することになります。これは $ADDLST() を使ってブロックリストをログ
ファイルとして使用する場合に、安全になります。また、これはスピードを
向上させる効果もあります ― 通常 $ADDLST は、ファイルを開き、新しい
エントリを追加し、ファイルを閉じるという動作をします。しかし、LOGFILE
モードでは、ファイルを書き込みの間も開いたまま保持しておくので、大量の
データを効率よく挿入することができます。
このことは、最新のエントリがまだファイルバッファにあって実際のファイルに
書き込まれておらず、ログファイルが使用中になっているような場合に、それを
他のプログラムで読み込もうとする場合には重要になりますので、よく覚えてお
いてください。しかし、設定をリロードしたり、ログを Proxomitron の
"Edit blockfile" オプションから編集したりする場合は、書き込まれていない
データはフラッシュされてログに書き込まれます。ログファイルに ".txt" 以外
の拡張子をつけておいて、その拡張子に対して特別なログビューアを関連づけて
おくことができます。こうしておくと、"Edit blockfile" オプションをログ
ビューアを起動するために使用することができます。
* $FILE(filename) コマンドを追加しました。これを使って、任意のファイルの
内容をフィルタの置換部に挿入することができます。これはウェブフィルタで
使う場合に便利ですが、ヘッダフィルタで使うこともできます(ヘッダはそれ
ぞれ1行である必要があり、サイズで 4K を超えられないということに注意して
ください)。
* $RESP(match) コマンドを追加しました。このコマンドはウェブサーバから
返された応答コードにマッチさせたり、取り込んだりするために使用できます。
通常、これは以下のようになっています...
"200 OK" or "404 Not Found" etc.
マッチはリターンコードから直接始まるので、返答における "HTTP/x.x" の
部分は含みません。しかし、コードの後ろにあるメッセージテキストは
マッチに含みます。たとえば、リダイレクトにマッチさせるには "$RESP(302*)"
を使用することができます。これはこの情報をログファイルに記録する場合
にも便利に使えます。
* 存在しないブロックリストにエントリを追加すると、その名前で「一時的」
リストを作成するようになりました。このリストはメモリ上だけに存在し、
全体で使える情報を蓄えておくハッシュ配列のように使うことができます。
このリストはどのメニューにも表示されず、編集することもできないので
注意してください(これはファイルではないからです)。しかしこれは
マッチで呼ぶことができ、他のリストと同じように追加されます。
また、設定をリロードしたり Proxomitron を再起動したりすると全ての
一時的リストはクリアされることも覚えておいてください。情報を長期間
保存したい場合は、通常のファイルベースのリストを使用してください。
* 複数マッチにおける置換バッファは、充分なメモリがある限りいかなる量の
データも挿入できるようになりました(以前までは、これは 32K に限られて
いました)。フィルタをデザインする際には、これにはより多くのメモリが
割り当てられるということに注意してください。これは慎重に使用するように
してください(特に新しい $FILE コマンドを使用する際には)。
* ストールしたファイルハンドルが再使用される場合の問題を修正しました。
― これは何人かの方がリポートしていた「途中までロードされた」ページ
の問題を修正するでしょう。
* 再使用された接続が、"Use remote proxy" のチェックが外されたにも
関わらずプロクシを使用してしまう問題を修正しました。
* "Read overflow" 警告が不必要にポップアップする問題を修正しました。
* 80 以外のポートで開かれているウェブサーバにアクセスした際に、
ホスト名が正しく解決されない可能性のあるバグを修正しました。
* サーバが "deflate" エンコードされたデータを、通常のヘッダバイト
あり/なし で送ってくるのに対処しました。全てのサーバが同じように
フォーマットするわけではないようです。
* proxcert.pem をまた1年更新しました。これは自己署名された証明書で、
Proxomitron はこれを実験的な SSL フィルタリングに使用しています。
(この機能はデフォルトでは有効になっていません。)
これは実際の正当なサーバ証明書ではありません。
Naoko 4.3
* $ASK(AllowList, DenyList, Prompt msg, item to add [,alternate match])
のコマンドを追加しました。
$ASK() コマンドは、そのサイトで特定のアイテムをフィルタするかどうか、
ユーザに尋ねるプロセスを自動化します。同じことを他の新しいコマンドを
組み合わせてすることもできますが、ASK はそれを一つの小さなパッケージに
まとめました。
* ブロックファイルに、NOAPPEND オプションを追加しました。このフラグが
セットされたブロックファイルは、ASK や ADDLST が呼ばれた際にも新しい
アイテムが追加されません。その場合でもそのアイテムはブロックされますが、
それはそのセッションのみ、もしくはリストがリロードされるまでです。
(どちらが先に来てもです)。
これは、何かを一時的にブロックしたいというような場合に有効に使えます。
私もこれが一種の裏技的な方法であることを認めます。もしもっといいアイデア
が浮かんだら、この方法はやめることになるでしょう。
* $DTM(format) コマンドを追加しました。これは日付、時間、接続情報を
置換テキストに挿入するために使用できます。このコマンドは、簡単な
フォーマット用の文字列を、表示をコントロールするために使用します。
日付をページに挿入したり、$LOG や同様のコマンドで情報を追加したり
するのに使えるでしょう。
* リモート接続と同様に、ローカル接続に対しても persistent connection
(持続的接続)をサポートしました。有効に使うためには、ブラウザで
HTTP/1.1 をプロクシ経由でも使うように設定し、さらにパイプラインを
有効にしてください(もしそれがオプションにある場合は)。また、同時
接続数を6-8個に設定することをおすすめします。これで、Proxomitron は
HTTP/1.1 のほとんどすべての追加機能を実装したことになります。
これが働くためには、Proxomitron は "chunked" エンコードを多用すること
になります。フィルタ後のアイテムサイズを、事前に知ることはできないから
です。これはあまり問題にはならないはずです。しかし、一部のブラウザが、
それほど多くのアイテムが "chunked" になることを想定していないという
ことは考えられます - 特にイメージなどでは。テストでは、Mozilla で
パイプラインを有効にすると、chunked エンコードではランダムに問題が発生
するようです。しかし、Proxomitron 内における扱いに問題があるわけでは
なさそうです(Mozilla におけるパイプラインのサポートは新しく、まだ
少しバグが多いようです)。Opera の場合、これもパイプラインを使いますが、
問題は無いようです。
HTTP/1.0 persistence もサポートされています。しかしながら、Proxomitron は
アイテムの content-length を頻繁に変更しますし、HTTP/1.0 は chunked
エンコードを許していないので、フィルタする場合に持続できる接続は少なく
なるでしょう。
ローカルにおける持続的接続は必要ならばオフにすることができます。また、
その keep-alive の時間はコンフィグダイアログの HTTP タブ内で設定する
ことができます。デフォルトでは、10秒間何も起こらないとローカル接続は
切断されます。新しいローカル接続は非常に速く生成されるので、たいていの
場合はこれで問題ないはずですが、もしかしたらこの値を増やしたいことが
あるかもしれません - 特に、あなたが Proxomitron を LAN 経由で外部から
使用しているような場合には。
* 検索ルーチンに、新しいキャラクタハッシングを追加しました。これは OR で
分けられていて、OR のそれぞれのセクションにおける最初のアイテムが
ワイルドカードでは無いような場合に、非常にスピードを向上させます。
例を見てみましょう...
(one|two|(three|four|five)|six) これはハッシュできますが...
(one|*two|(three|four|five)|six) これはハッシュできません、そして...
([to]ne|two|(three|four|five)|six) これもダメです。
実際は、それぞれの括弧 (...) はそれぞれ独自のハッシュを持つので、
上記のケースではすべて "(three|four|five)" の部分はハッシュされる
ことになります。同様に、AND や ANDAND と混ざっていても通常は問題
ありません...
(one|two|(three|four|five)|six)*(end)&&*whatever*
(one|two|((three|four|five)*&*whatever*)|six)
このことは、以下のような複雑なマッチは...(banner blaster より)
<(a\s*|i(nput*>|layer*|frame*))
以下のように書くのとスピードの面であまり変わらないことになります...
|||