自分自身のための ものづくり / 自分自身のためのものづくりメモ

* いわゆる公開プロキシからのアクセスを弾く

掲示板へのspamが激しくなりつつあるので対策。

is_OpenProxy.pl
sub is_OpenProxy {
  my $ip = shift(@_) ;

  # 
  my $ip0 = join '.', unpack 'C4', gethostbyname(sprintf qq|%s.list.dsbl.org|, join '.', reverse split /\./, $ip) ;
  if ($ip0 =~ /^127/) {
    return 1 ;
  }

  $ip0 = join '.', unpack 'C4', gethostbyname(sprintf qq|%s.niku.2ch.net.|, join '.', reverse split /\./, $ip) ;
  if ($ip0 =~ /^127/) {
    return 1 ;
  }

  $ip0 = join '.', unpack 'C4', gethostbyname(sprintf qq|%s.bbx.2ch.net.|, join '.', reverse split /\./, $ip) ;
  if ($ip0 =~ /^127/) {
    return 1 ;
  }

  return 0 ;
}

1 ;

picoBBS改変部分
unless (&is_OpenProxy($ENV{'REMOTE_ADDR'}) == 0) {
   require "404.pl" ;
   exit ;
}


参考:
"dsbl unpack c4"で検索したら見つかった
http://f23.aaa.livedoor.jp/~kanetuki/yybbs/yybbs.cgi
こういう自動投稿は 555 - 2005/12/11(Sun) 00:54 No.280

ほとんどの場合公開Proxyリストを取り込んだスクリプトによるものなので
例えばyybbs.cgiの先頭のほう(メイン処理の前)に

$ip = $ENV{'REMOTE_ADDR'};
$ip0 = join '.', unpack 'C4', gethostbyname(sprintf qq|%s.list.dsbl.org|, join '.', reverse split /\./, $ip);
if($ip0 =~ /^127/){ &error("Can't write via open proxy"); }

$ip0 = join '.', unpack 'C4', gethostbyname(sprintf qq|%s.niku.2ch.net.|, join '.', reverse split /\./, $ip);
if($ip0 =~ /^127/){ &error("Can't write via open proxy"); }

$ip0 = join '.', unpack 'C4', gethostbyname(sprintf qq|%s.bbx.2ch.net.|, join '.', reverse split /\./, $ip);
if($ip0 =~ /^127/){ &error("Can't write via open proxy"); }

などで対策してみてはいかがでしょう。

風呂敷確認君 弐式 2.09
http://sv2ch.baila6.jp/chk_proxy.cgi

#掲示板spam対策 #Web

create : 2006/07/09 (Sun)
update : 2006/07/09 (Sun)