- 名前 (NAME)
- 概要 (SYNOPSIS)
- 説明 (DESCRIPTION)
- ディレクティブ (DIRECTIVES)
- RefererListFile のシンタックス (SYNTAX OF RefererListFile)
- NOTES
- 行うこと (TODO)
- 参考資料 (SEE ALSO)
- 作者 (AUTHOR)
- 著作権 (COPYRIGHT)
- 翻訳者
名前 (NAME)¶
Apache::JumpByReferer - Referer ヘッダ値によってジャンプやブロックをする
概要 (SYNOPSIS)¶
PERL_ACCESS (または EVERYTHING) を有効にして mod_perl をコンパイルする必要があります。 そして、下記のような設定を書いて下さい:
httpd.conf 内
<Directory /protected/directory/>
PerlAccessHandler Apache::JumpByReferer
PerlSetVar RefererListFile conf/jump.conf
PerlSetVar JumpByReferer On
</Directory>
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/
説明 (DESCRIPTION)¶
Apache::JumpByReferer は Apache + mod_perl におけるアクセス制御フェーズのハンドラです。 あなたの指定した web サイトから来たユーザをブロック、あるいは別の URL に飛ばす事が可能です。
このハンドラは、初回呼出の際に設定をキャッシュし、 RefererListFile
の更新時刻を調べ、前回キャッシュした時間以降に更新されていたら 再度キャッシュしなおします。即ち、あなたはいつでも設定変更のための書き換えを行えます。
RefererListFile
に、あなたの指定する URL の正規表現 (REGEX) を書きます。 ユーザをジャンプさせたい場合、飛ばす先の URL を REGEX の後ろに空白で繋いで書きます。 もし、ディレクトリに対してアクセスして欲しくない場合は、Forbidden
(大文字小文字を区別しない) という文字列を REGEX の後ろに空白で繋いで書きます。
ディレクティブ (DIRECTIVES)¶
PerlSetVar JumpByReferer ( On | Off )
JumpByReferer
はこのハンドラ動作のスイッチです。あなたはOn
かOff
(大文字小文字を区別しない) の値をこのディレクティブに記述しなくてはなりません。 このディレクティブがOn
に設定されていない場合は、DECLINED を返し、機能しません。PerlSetVar RefererListFile FILENAME
RefererListFile
へ、あなたの設定を書かなくてはなりません。このファイルは Apache のUser
とGroup
ディレクティブで設定された ユーザ及びグループに対して、読み出し可能でなければいけません。
RefererListFile のシンタックス (SYNTAX OF RefererListFile)¶
あなたは行頭から妥当な REGEX を記述すべきです。REGEX は、 妥当であるかのテストをされ、更新日時のタイムスタンプとあわせて 名前空間にキャッシュされます。REGEX が妥当ではない場合は、 キャッシュされないでしょう。
そして、飛ばす先の URL か Forbidden
を REGEX の後ろに書いてください。
REGEX の内部にいくつかの空白文字を含んだものを記述したい場合は、 それをクオートすべきです。もしそれをクオートしなかった場合、テキスト解析は 失敗します。
このハンドラは、URL が自身のサーバ内部であった場合、internal_redirect()
を実行するでしょう。URL がサーバ外部であった場合は、Location
ヘッダと REDIRECT
ステータスを出力するでしょう。これの判定方法は、http(s)://
から 始まる場合を外部 URL、その他から始まる場合を内部 URI としています。
コメント行は、#
文字から始まる行で、空行は無視されます。
NOTES¶
このハンドラは、イニシャルリクエストに対してのみ適用され、即ち、 サブリクエストや、内部リダイレクトに対しては動作しません。それは、 もしこれらに適用した場合に、サーバが無限ループに陥ってしまうかもしれないからです。 殆ど全ての非イニシャルリクエストは、イニシャルリクエストと同じ Referer ヘッダ値を持たされます。このハンドラが非イニシャルリクエストへも適用され、 リダイレクト先の URI が親ディレクトリの設定を継承する時、このハンドラは、 内部リダイレクトを実行し、現在の URI に対して何度もリダイレクトを行うでしょう。 なぜなら、このケースでは、JumpByReferer 設定の有効範囲の内部だからです。 このハンドラが非イニシャルリクエストへも働く場合、恐らくあなたのシステムの リソースはこのハンドラによって瞬時に食い潰されるでしょう。そのため、 この機能 (非イニシャルリクエストに機能しない事) は、自己防衛の為に存在します。 恐らくこの設定で問題はないでしょう。しかし、このモジュールを使用する際には この事柄を十分に理解して下さい。
行うこと (TODO)¶
* このモジュールをテストするために、私は Apache::test の使い方を理解するべきです。
* このハンドラを PerlAccessHandler
以下に置くのが最良の手段であるか、私は理解すべきです。
* 恐らく、私はドキュメントを正しく書くために、もっと英語を勉強しないとダメでしょう。
参考資料 (SEE ALSO)¶
mod_perl(1), Apache(3), Text::ParseWords
作者 (AUTHOR)¶
谷口公一 <[email protected]>
著作権 (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.
翻訳者¶
谷口公一 <[email protected]>