[掲示板へ戻る]
【Perl】質問スレッド
- [1] 名無しのゴンベエ - 2002/03/08 19:38
- proxyからのアクセスを規制する方法について
知りたいのですが・・・
ちなみに某サイトに以下のような方法が載っていたのですが
――――――――――――――――――――――――――
@ISP_list = ("ocn.ne.jp","dion.ne.jp",…,"alpha-net.ne.jp")
$flag = 0;
foreach $current_ISP ( @ISP_list ){
if ( $ENV { 'remote_host '} =~ /$current_ISP/){
$flag = 1;
}
}
――――――――――――――――――――――――――
この方法だとホスト名を記述するのが面倒っぽいので
もっと簡単な方法はないのでしょうか?
- [2] 名無しさん - 2002/03/08 22:12
- 2GET
- [3] 名無しのゴンベエ - 2002/03/09 01:59
- >>1は検索エンジンの使い方を知らないラスィー
- [4] apeboardより - 2002/03/09 13:40
- # proxyからのアクセスを規制する
#(規制するときは'1'、しないときは'')
$pcheck = '1';
# proxy制限レベル
# '1' - 匿名proxy経由の閲覧禁止
# '2' - 全てのproxy経由の閲覧禁止
$plevel = '1';
# ----------------------------------
sub bbs {
# PROXYからのアクセスを制限______________________________________
if($pcheck ne ''){
$proc = &chkproxy;
if($proc == 2 && $plevel >= 1){
&print_error("あなたのホストは投稿制限の対象となっています。");
}
if($proc == 1){
if($plevel == 2){
&print_error("あなたのホストは投稿制限の対象となっています。");
}
}
}
}
# proxyチェックのサブルーチン______________________________________________
sub chkproxy{
$pstatus = 0;
# プロクシ経由のアクセスかを判別_______________________________
if($ENV{'HTTP_VIA'} ne "" ){$pstatus = 2;}
if($ENV{'HTTP_X_FORWARDED_FOR'} ne ""){$pstatus = 2;}
if($ENV{'HTTP_FORWARDED'} ne ""){$pstatus = 2;}
if($ENV{'HTTP_X_LOCKING'} ne ""){$pstatus = 2;}
if($ENV{'HTTP_CACHE_INFO'} ne ""){$pstatus = 2;}
if($ENV{'HTTP_CACHE_CONTROL'} ne ""){$pstatus = 2;}
if($ENV{'HTTP_SP_HOST'} ne ""){$pstatus = 2;}
if($ENV{'HTTP_FROM'} ne ""){$pstatus = 2;}
if($ENV{'HTTP_PROXY_CONNECTION'} ne ""){$pstatus = 2;}
if($ENV{'HTTP_USER_AGENT'} =~ /via|cache|proxy|delegate/i){$pstatus = 2;}
if($ENV{'REMOTE_HOST'} =~ /proxy|cache|via|delegate|www|mail/i){$pstatus = 2;}
if($pstatus == 2){
# proxyからのアクセスなら、それが匿名であるかどうか判別______
if( $ENV{'HTTP_VIA'} =~ s/.*(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/){
$proxyip = $ENV{'HTTP_VIA'};
$pstatus = 1;
}
if( $ENV{'HTTP_X_FORWARDED_FOR'} =~ s/^(\d+)\.(\d+)\.(\d+)\.(\d+)(\D*).*/$1.$2.$3.$4/){
$proxyip = $ENV{'HTTP_X_FORWARDED_FOR'};
$pstatus = 1;
}
if( $ENV{'HTTP_FORWARDED'} =~ s/.*(\d+)\.(\d+)\.(\d+)\.(\d+)/$1.$2.$3.$4/){
$proxyip = $ENV{'HTTP_FORWARDED'};
$pstatus = 1;
}
if( $ENV{'HTTP_X_LOCKING'} =~ s/.*(\d+)\.(\d+)\.(\d+)\.(\d+).*/$1.$2.$3.$4/){
$proxyip = $ENV{'HTTP_X_LOCKING'};
$pstatus = 1;
}
if( $ENV{'HTTP_CACHE_INFO'} =~ s/.*(\d+)\.(\d+)\.(\d+)\.(\d+).*/$1.$2.$3.$4/ ){
$proxyip = $ENV{'HTTP_CACHE_INFO'};
$pstatus = 1;
}
if($pstatus == 1){
if($proxyip=~/([0-9]+)\.([0-9]+)\.([0-9]+)\.([0-9]+)/){
$pip="$1.$2.$3.$4";
# 匿名でない事を装った匿名proxyであるかどうかを判別______
# 取り出したIPが無効なIPなら匿名
if($pip eq "127.0.0.1" || $pip eq "0.0.0.0" || $pip eq "255.255.255.255"){$pstatus = 2;}
# 取り出したIPとアクセスしたIPが同じなら匿名_____________
if($pip eq $ENV{'REMOTE_ADDR'}){$pstatus = 2;}
if($pstatus == 1){
$proxyaddr=(gethostbyaddr(pack('C4',$1,$2,$3,$4),2))[0];
if($proxyaddr eq ""){$proxyaddr = $pip;}
# 取り出したIPも実質上proxyのようなら匿名_________
if($proxyaddr =~ /proxy|cache|via|delegate|www|mail/i){$pstatus = 2;}
}
}else{
# 正しくIPが取得できなかったので匿名_____________________
$pstatus = 2;
}
}
}
return $pstatus;
}
- [5] 4 - 2002/03/09 13:44
- ↑の見づらくなっちゃった・・・
詳細は、http://www.2apes.com/ のapeboard.cgiのソースを見て下さい。
- [6] 名無しのゴンベエ - 2002/03/09 14:25
- 正直、環境変数で弾くレベルの串チェックでは
匿名串だと素通りできるので気休めにしかならないよ。
- [7] 名無しのゴンベエ - 2002/03/09 15:51
- >>6
完璧に串を規制するのは、難しいってことですね。