[掲示板へ戻る]

【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
完璧に串を規制するのは、難しいってことですね。


[掲示板へ戻る] 記事No 削除キー

お名前
E-Mail
ソート (スレッドをトップへ移動)
削除キー (記事削除時に使用。英数字で8文字以内)
コメント
   クッキー情報を保存