なんか30ぐらいコメントスパムがどばーーと来襲。これ書いている間にもいろんなIPアドレスで同じようなスパムが寄せられております。これまでは日本語が入ってない投稿を拒否するだけでほとんど十分だったんだけど、今日来たのはいつもとひと味違う。文末に該当記事の一部を挿入して送ってくるので弾くことができない。
ということで鬱陶しいので何とかする。パッと思い付いたのは一度に投稿できる「http」の数を制限する方法。コメントスパムには大量のURLが書かれている事が多い。他にもないかなと調べてみると、リファラで自サイト以外からの書き込みを拒否するやり方がメジャーらしい。偽装されたら意味無いだろうけど。
このサイトは
ppBlog1.4.3 で構成されています。その modules/comment.php の適当な場所にこんなコードを書いてみた。
///// コメントスパム対策 //////
if(!ADMIN){
//httpの数が多いと弾く
if(substr_count(strtolower($c_com), 'http') >= 4){
print "「http」が4つ以上ある文章は書き込めません";
exit;
}
//携帯はチェックしない
if(!preg_match('/docomo|up\.browser|j\-phone|softbank|vodafone|pdxgw|astel|l\-mode/i',$_SERVER['HTTP_USER_AGENT'])){
//記事のURL以外からは拒否
if(!stristr($_SERVER['HTTP_REFERER'], ROOT_PATH.'index.php?UID='.$UID)){
print "どこからコメントしてるの?";
exit;
}
// ブラウザの言語設定で、日本語が含まれていないと拒否
// 入力内容に日本語が入っていても、弾く
if(!stristr($_SERVER["HTTP_ACCEPT_LANGUAGE"], "ja")){
print "鎖国してます";
exit;
}
}}
おぉ、スパムを弾くことに成功。PHP初心者向けプログラミングサイトを見て頑張った甲斐があった。最新の v1.6 系ではこういうの無くても大丈夫なのかな?
しばらくこれで様子を見る。
上の記事に対するコメントです
1. kuma 2007/11/04 19:32
困ったな...忘れているし...