ホームページへのアクセスをチェックし、登録されたドメインのユーザーを別のページへと導く。
アクセスを許したくないユーザーのドメインを調べておき、そのユーザーのアクセスを拒否することが出来ます。
ただし、ドメイン毎のアクセスチェックになるため同じアクセスプロバイダからのドメイン拒否には使用できません。(自分も見れなくなります)
CGIをページの入り口に設置し、ホストチェックを行う場合
read me
-index.html
host_check.cgi
log.csv
NotFound.html
基本的に必要なのは実行プログラムの host_check.cgi だけです。
既存のCGIにホストチェックのプログラムを組み込む場合
NGhost_check.pl
上記ファイルを既存のperlプログラムに読み込ませ、サブルーチンを呼び出すだけです。
こちらの設定方法はNGhost_check.plの中を見てください。
サイトの入り口となるHTMLファイル(通常index.html)にアクセスを行うと、すぐさま host_check.cgi を呼び出します。
アクセスした人のプロバイダ(リモートサーバー)がチェックされ、登録ドメインかどうかを判別し、それに応じてページを選択します。
サーバーがCGI(perl)を使用できることが必要です。(SSIは不要です)
-index.htmlの設定
このファイルは使用例ですので、実際には内容のあるページでもかまいません。
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=host_check.cgi">
を<HEAD>~</HEAD>の間に置くと、すぐにCGIを呼び出してチェックが始まります。
リンクを設定して、そこから「host_check.cgi」を呼び出すこともできます。
例:<A HREF="host_check.cgi">~</A>
host_check.cgiの設定
#!/usr/local/bin/perl
(サーバーの設定に応じて変更する必要があります。CGIを実現するperlのプログラムを呼び出すための記述で、必ずファイルの1行目に必要です。)
変更例:#!/usr/local/bin/perl5 , #!/usr/bin/perl , etc...
$check_host = "yahoo.co.jp";
アクセス拒否をするドメイン名
複数あるときは「,」で区切ってつなげます。この時スペースを入れないように注意して下さい。
例:$check_host = "yahoo.co.jp,yahoo.ne.jp,yahoo.or.jp";
$next_page = "top.html";
登録ドメイン以外からのアクセスだった場合に表示するページ。
ページは自由に設定できます。サブディレクトリを作成してその中にサイトを引越すれば、更にサイトを隠すことができます。
$skip_page = "NotFound.html";
登録ドメインからのアクセス時に表示するページ。
同梱の NotFound.html をリンク先に設定していますが、直接別のサイトを指定してもかまいません。
例:$skip_page = "http://www.yahoo.co.jp/";
$log = "cgi/log.csv";
ログファイル名(log.csv)とそれを入れるディレクトリ名(cgi)です。
どちらも自由に変更することができます。
例:$log = "check/host.csv";
$max = "1000";
ログファイルの最大保存数です。この件数を越えた古いデータは削除されます。
「0」件に設定するとログファイルを残しません。
log.csvの設定
これはログファイルと呼び、アクセスの状況を記録するものです。
記録内容は check_host.cgi にアクセスした時間とリモートホスト名です。
ドメイン名だけでなく、プロバイダに割り当てられた個別の識別部分も含まれています。
例:xx999.yahoo.ne.jp
この場合、xx999 には識別名が入り、yahoo.ne.jp がドメイン名となります。
NotFound.htmlの設定
偽物の Not Found を表示します。これは自由に内容を変更できます。
複数のプロバイダを使ってアクセスされたときに、「サーバーの調子が悪くて見えないときがある」と言い訳できるようにしてあります。(分かる人には分かってしまうけど)
表示後、<META>の中で自動的に切り替わるページを設定してあります。
<META HTTP-EQUIV="Refresh" CONTENT="5;URL=http://www.yahoo.co.jp/">
5秒後に、http://www.yahoo.co.jp/へ移動するという設定です。
リンクを自動または手動にして、host_check.cgi を呼び出すだけです。
もちろん、これを複数のページに設置することもできます。
-index.html には自動リンクが記述してありますので、これを「index.html」にリネームしてホームページに使う場合を例にしてみます。
それぞれのファイルを次のようにftpで転送します。
/~your/index.html
/~your/NotFound.html
/~your/host_check.cgi(755)
/~your/cgi/log.csv(777)
「host_check.cgi」のパーミッションは755に設定します。
「NotFound.html」はindex.htmlと同じディレクトリに置きます。
CGI ディレクトリはパーミッションを777に設定します。
「log.csv」を cgi ディレクトリに入れ、書き込みができるようにパーミッションを777に設定します。
これで、index.html をブラウザに読み込むと、そこから host_check.cgi が呼び出されて動作します。
アクセスログにはCGIを呼び出した時刻が記録されますが、上記の方法ではBBSへの書き込みに関わらず記録されます。それはそれでメリットはあります。
しかし、来訪者の多いBBSなどでは書き込みの順序とBBSを呼び出した順序が変わってしまうことも多々考えられます。
そこで、自己のサイトに設置したBBSの場合、BBSの書き込み後に host_check.cgi を読み込めばほぼ間違いなく記録を残すことができます。
ただし、短時間に処理されるとはいえ、同時に書き込みが発生するとログが1つ飛んでしまう可能性があります。書き込みの時間とログの時間をかならず付き合わせて数の確認をしてください。
同時書き込みを回避するためにロックファイルを用いる方法がありますが、これによりCGIの動作を停止させる方が問題ですので、この方法は取っていません。
秀麗(Shurey)
http://www.shurey.com/
[NetGurdianにて配布]
http://gurdian.ne.jp/
二次配布、改良による使用も自由にできます。
ただし、改良を施した場合、新しいreadme.htmlを付けてください。