DeleGate でクッキーを阻止しよう

DeleGate でクッキーを阻止することの意義

DeleGate は, HTTP に限らず様々なプ ロトコルを中継してくれるプロキシサーバです. この DeleGate には, DeleGate を通過する際に情報を書き換えたり, 付け加えたり, 削除したりす る機能があります. この機能を使って, 外から来る Set-Cookie ヘッダ, 内側 から出ていこうとする Cookie ヘッダを削除することができます.

Lynx (バージョン 2.7 以上な ら確実) や Netscape Navigator (or Communicator) のバージョン 4 以上などならば, 設定を変更するだ けで簡単にクッキーを使わないようにすることができます. ならば, 何故 DeleGate でクッキーをブロックするのか? こじつけですが, 理由をいくつか 考えてみました.

  1. システム管理者として, 利用者全員にクッキーを使わせたくないときに, クッキーを通さない DeleGate をプロキシとして利用すれば OK.
  2. Netscape Navigator 3 以下では, 相手から送られてくるクッキーの受け 入れに対して警告は出せるが, バージョン 4 以上のように「全く受 け入れない」という設定ができない. このとき, 1 つのファイルを送 る毎にクッキーがやってくると, いちいち「キャンセル」を選択する のが面倒. でも DeleGate がクッキーを元から断ってくれれば, 面倒 な思いをしなくて済む. 少なくとも, Linux Tips & Tricks で紹介されている, /dev/null を使う方法や chmod 000 としてしまう方法よりは汎用性がある.
  3. 例えば「Set-Cookie は受け付けてクッキーの素性を調べたいが, それを Cookie として外へ出したくない」などの, ブラウザのオプションに ないような要求も実現可.

クッキー阻止の実際

DeleGate には, The Common Filter Interface for Application Level Gateway Systems (CFI) という機能があります. これは, 簡単な書式にしたがっ てルールを記述するだけで, DeleGate を通過する情報にフィルタをかけたり, HTTP に関していえばヘッダの情報を削除したりすることができます. この機 能を使って, Set-Cookie ヘッダ, Cookie ヘッダをブロックします.

まず外からやってくる Set-Cookie ヘッダをブロックするためには, DeleGate → クライアントという情報の流れに対して, 以下のような CFI スクリプトを準備します (ファイル名は ck000.cfi とします).

#!cfi
Remove/Set-Cookie:
Remove/Set-Cookie2:

1 行目は, このファイルが CFI スクリプトであることを示します. そして 2 行目は Set-Cookie ヘッダを, 3 行目は Set-Cookie2 ヘッダ (送ってくる サーバはありますか?) を削除します.

次に Cookie ヘッダです. これは, クライアント → DeleGate という 情報の流れに対して, 以下のような CFI スクリプトを準備します (ファイル 名は ck001.cfi とします).

#!cfi
Remove/Cookie:
Remove/Cookie2:

1 行目は言わずもがな. 2 行目, 3 行目でそれぞれ Cookie, Cookie2 ヘッ ダをブロックします (私の使っている Lynx/2.8rel.2 libwww-FM/2.14 は Cookie2 ヘッダを送ります).

この ck000.cfi, ck001.cfi を使って, HTTP のプロキシとして DeleGate をポート番号 8080 で起動するために, 次のようなシェルスクリプトを準備し ました. delegated や ck00?.cfi のパスは, 適当に変更して下さい.

#!/bin/sh
# start delegated with ck00[01].cfi
/usr/local/sbin/delegated -P8080 \
    SERVER=http://-/-/ \
    FTOCL="./ck000.cfi" \
    FFROMCL="./ck001.cfi"

あとはブラウザで, プロキシサーバを DeleGate を動かしているマシン名 に, ポート番号を上で指定した番号にそれぞれ指定すれば, もうクッ キーを気にする必要はありません (^^;.

問題点?

JavaScript を使って送られてくるクッキーは, (多分) Set-Cookie ヘッダ を使わないため, この方法では侵入を防ぐことをできないでしょう. 更に, クッキーによってブラウザに蓄積された情報を, JavaScript で利用しているペー ジの場合も, 多分 Cookie ヘッダを使っていないので, この方法ではその効力 を無効にすることはできないでしょう. ただし, それでも Cookie ヘッダをブ ロックしますので, クッキーによって蓄積された情報がサーバ側へ送り返され ることはないと思うので, 実害はないでしょう. 気になるときは, JavaScript を理解しないブラウザを利用するか, ブラウザの設定で JavaScript を無効に して下さい.



[うさぎ印] おたより, お待ちしています

sato.mshr@gmail.com