=encoding euc-jp =head1 名前 (NAME) Apache::JumpByReferer - Referer ヘッダ値によってジャンプやブロックをする =head1 概要 (SYNOPSIS) PERL_ACCESS (または EVERYTHING) を有効にして mod_perl をコンパイルする必要があります。 そして、下記のような設定を書いて下さい: httpd.conf 内 PerlAccessHandler Apache::JumpByReferer PerlSetVar RefererListFile conf/jump.conf PerlSetVar JumpByReferer On RefererListFile 内 (conf/jump.conf) # 書式: # Referer 正規表現 ジャンプする URL (または forbidden) http://malicious\.site\.example\.com/ http://goodbye.example.com/ http://another\.malicious\.site/ forbidden http://ime\.nu/ forbidden http://[^.]+\.google\.([^/]+)/ /hello_googler.html http://[^.]+\.yahoo\.([^/]+)/ /do_you_yahoo/? "Field blocked by" /do/not/block/the/field/ =head1 説明 (DESCRIPTION) Apache::JumpByReferer は Apache + mod_perl におけるアクセス制御フェーズのハンドラです。 あなたの指定した web サイトから来たユーザをブロック、あるいは別の URL に飛ばす事が可能です。 このハンドラは、初回呼出の際に設定をキャッシュし、 C の更新時刻を調べ、前回キャッシュした時間以降に更新されていたら 再度キャッシュしなおします。即ち、あなたはいつでも設定変更のための書き換えを行えます。 C に、あなたの指定する URL の正規表現 (I) を書きます。 ユーザをジャンプさせたい場合、飛ばす先の URL を I の後ろに空白で繋いで書きます。 もし、ディレクトリに対してアクセスして欲しくない場合は、C (大文字小文字を区別しない) という文字列を I の後ろに空白で繋いで書きます。 =head1 ディレクティブ (DIRECTIVES) =over 4 =item * PerlSetVar JumpByReferer ( On | Off ) C はこのハンドラ動作のスイッチです。あなたは C か C (大文字小文字を区別しない) の値をこのディレクティブに記述しなくてはなりません。 このディレクティブが C に設定されていない場合は、DECLINED を返し、機能しません。 =item * PerlSetVar RefererListFile FILENAME C へ、あなたの設定を書かなくてはなりません。このファイルは Apache の C と C ディレクティブで設定された ユーザ及びグループに対して、読み出し可能でなければいけません。 =back =head1 RefererListFile のシンタックス (SYNTAX OF RefererListFile) あなたは行頭から妥当な I を記述すべきです。I は、 妥当であるかのテストをされ、更新日時のタイムスタンプとあわせて 名前空間にキャッシュされます。I が妥当ではない場合は、 キャッシュされないでしょう。 そして、飛ばす先の URL か C を I の後ろに書いてください。 I の内部にいくつかの空白文字を含んだものを記述したい場合は、 それをクオートすべきです。もしそれをクオートしなかった場合、テキスト解析は 失敗します。 このハンドラは、URL が自身のサーバ内部であった場合、C を実行するでしょう。URL がサーバ外部であった場合は、C ヘッダと C ステータスを出力するでしょう。これの判定方法は、C から 始まる場合を外部 URL、その他から始まる場合を内部 URI としています。 コメント行は、C<#> 文字から始まる行で、空行は無視されます。 =head1 NOTES このハンドラは、イニシャルリクエストに対してのみ適用され、即ち、 サブリクエストや、内部リダイレクトに対しては動作しません。それは、 もしこれらに適用した場合に、サーバが無限ループに陥ってしまうかもしれないからです。 殆ど全ての非イニシャルリクエストは、イニシャルリクエストと同じ Referer ヘッダ値を持たされます。このハンドラが非イニシャルリクエストへも適用され、 リダイレクト先の URI が親ディレクトリの設定を継承する時、このハンドラは、 内部リダイレクトを実行し、現在の URI に対して何度もリダイレクトを行うでしょう。 なぜなら、このケースでは、B 設定の有効範囲の内部だからです。 このハンドラが非イニシャルリクエストへも働く場合、恐らくあなたのシステムの リソースはこのハンドラによって瞬時に食い潰されるでしょう。そのため、 この機能 (非イニシャルリクエストに機能しない事) は、自己防衛の為に存在します。 恐らくこの設定で問題はないでしょう。しかし、このモジュールを使用する際には この事柄を十分に理解して下さい。 =head1 行うこと (TODO) * このモジュールをテストするために、私は Apache::test の使い方を理解するべきです。 * このハンドラを C 以下に置くのが最良の手段であるか、私は理解すべきです。 * 恐らく、私はドキュメントを正しく書くために、もっと英語を勉強しないとダメでしょう。 =head1 参考資料 (SEE ALSO) mod_perl(1), Apache(3), L =head1 作者 (AUTHOR) 谷口公一 Etaniguchi@users.sourceforge.jpE =head1 著作権 (COPYRIGHT) Copyright (c) 2003 Koichi Taniguchi. Japan. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 翻訳者 谷口公一 Etaniguchi@users.sourceforge.jpE =cut