前回のあらまし

1、Apacheの mod_ext_filter でPOSTデータにsidを追加する。
2、POSTデータにsidを追加するApacheモジュールを新規に組む。
の案が出ていて、1についてはどうやらApacheがサポートしていないということが判明した。

というわけで、2の実現に取り掛かる。
結論から言うとこっちもダメでした。
POSTデータにsidを付与するApacheモジュールは組めたのだけれど、Proxy経由で動作しない問題が発生。
どうやら、Proxyを介するときはContent-Lengthヘッダも書き換えねばならないらしい。
Content-Lengthヘッダを消してしまえばよいのかと思い、 RequestHeader unset を試してみるものの効果なし。
このあたりはフィルタの処理順序に由来するものだろう。
さらっと書いてるけど、不慣れなApacheモジュールを作るのに2日、さらにProxy経由で動かない原因特定に1日かかっている。
Content-LengthはHTTPのヘッダ部なので、書き換えはさらに面倒であることが予想された。

というわけで、第3の選択肢の登場。
3、test/bbs.cgiへの書き込みアクセスを、mod_rewriteで書き換えて、ローカルのphpで受け、phpでsidを付与した書き込み要求を行う。

具体的には、以下のディレクティブを書いた。

RewriteEngine on
RewriteRule ^/2ch/([0-9A-Za-z]+)/test/bbs.cgi /post.php?saba=$1 [L]

これで、post.phpは、GET変数に鯖名を、POST変数にユーザーの送信データを得ることが出来る。
後は、このPHPでsidを取ってきてPOST変数に付与してやれば良い。
SIDは別のphpスクリプトでcronをまわして定期更新させるようにしておく。
これで、原理的にはOKとなる。

実際は、SIDの渡し方ではまったり、Cookieの設定を送信する必要があったりして、さらに時間を食うことになるのだけれど、とにかく何とかリリースにこぎつけた。

あぁ、めんどくさかった……

PeerBlock・PeerGuardian用IPリスト
こちら、月一で更新されてますか?

written by lol 2011/02/11 07:37

スクリプトが自動起動されるので
中の人が何もしなくても月一で更新されます。

Refererの無いアクセスは弾いてるので、PeerBlockからのURL直アクセスはできないようになってます。

written by ろじ 2011/02/11 11:02

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です