トップ > Perl Tips > アクセス制限をしよう


 ■ アクセス制限をしよう

基礎編:IPアドレスからホスト名を取得しよう

アクセスしてきた人のホスト名、あるいは、IPアドレスを調べ、
あらかじめ設定してあるリストに入っていたら、アクセスをはじくという仕組みです。

今回はサブルーチンを使っていますので、今皆さんがお使いのスクリプトに組み込むことができます。
サブルーチンの説明はサブルーチンとは Part1をご覧ください。


<スクリプト>


sub check {
@hosts = ('aaa.ne.jp','bbb.co.jp');

$host = gethostbyaddr(pack("C4", split(/\./, $ENV{'REMOTE_ADDR'})), 2) || $ENV{'REMOTE_ADDR'};

foreach $i (@hosts) {
if ($host =~ /$i/) {
print "アクセスが許可されていません。\n";
exit;
}
}
}



<解説>
・このスクリプトを呼び出すときは、スクリプト冒頭(ヘッダが出力された後)に
✓といったようにサブルーチンを呼び出します。

・@hosts
ここで、拒否するホスト(ホスト名が逆引きできない場合はIPアドレス)を指定します。
配列変数ですので、いくつでも指定できます。
配列変数については配列変数についてをご覧ください。

・$host = gethostbyaddr(以下略)
ここで、ホスト名を取得するわけですが、
何らかの事情によりホスト名が取得できない場合があります。
そういうときのために || $ENV{'REMOTE_ADDR'} というのをつけます。
これは、ホスト名が取得できなかった場合に、IPアドレスを代入するものです。

・foreach $i (@hosts) {(以下略)
ホスト名(IPアドレス)と、拒否リストを照らし合わせます。
foreachというのは配列変数すべてに処理をするものです。
拒否リストすべてと照らし合わせ、拒否リストの文字列が含まれていればメッセージを出力します。
exit; を必ずつけてください。これがないと、終了しないため、アクセス制限の意味がなくなります。




トラックバック

このエントリーのトラックバックURL:
http://easycgi.xrea.jp/mt-tb.cgi/54