2chのBBQはゴタゴタがあった余波で外部参照ができなくなった。
便利だったのになあ・・・
使えなくなったのは仕方ないけど荒らしは待ってくれない
他のブラックリストを使って対処するしかない。
なのでそれに対応したコードを考えてみた。
(まあ、今までBBQだったアドレスを他のDNSBLのアドレスに変えれば良いだけなんだけどw)
<html> <head> <title>DNSBLチェック</title> </head> <body> <form action="" method="get"> テスト用IP<input type="text" value="" name="ip" /><br /> <input type="text" value="" name="comment" /> <input type="submit" value="コメント送信" /> </form> <?php $ip = ''; // IP取得 if(isset($_GET['ip']) && $_GET['ip']!=null && filter_var($_GET['ip'],FILTER_VALIDATE_IP)){ $ip=$_GET['ip']; }else{ $ip = $_SERVER['REMOTE_ADDR']; } // メインルーチン if(isset($_GET['comment']) && $_GET['comment']!=null){ if(dnsbllookup($ip)){ echo('ERROR! プロキシ経由のコメントは出来ません。<br>'); echo('IP='.$ip); exit(); }else{ echo(htmlspecialchars($_GET['comment']).'<br>'); echo('IP='.$ip); exit(); } } // DNSBLチェック function dnsbllookup($ip){ $dnsbl_lookup=array("all.rbl.jp", "bl.spamcop.net", "zen.spamhaus.org"); if($ip){ $reverse_ip=implode(".",array_reverse(explode(".",$ip))); foreach($dnsbl_lookup as $host){ if(checkdnsrr($reverse_ip.".".$host.".","A")){ return true; } } } return false; } ?>
$dnsbl_lookupに配列でDNSBLのアドレスを渡す。
有効なDNSBLはDNSBL Lookupとかで探すと良い。
適当に使ってみたけど、抜けてるIPが多いので複数設定する必要がある様子。
とりあえず設定してある3つは2chで拾ってきたもの。