PHP系の掲示板でマルチバイトを含まない投稿をスパムとして扱う
2006年12月13日Table of Contents
ブログや掲示板への国外からのスパムで悩む・・・なんてことが多いと思うんですが。
今回は、PHP系の掲示板限定(Perl互換の正規表現なので流用可能)で、コメントにマルチバイトを含まない場合の排他処理の部分をメモ。
他にもスパム対策として有効な方法はありますが、とりあえず導入が楽なので。
//{{{ checkMultiBitesString() --- マルチバイトの文字列かどうかをチェック /** * マルチバイトの文字列かどうかをチェック * @param: string $string * @return: boolean * @access: public */ function checkMultiBitesString($string) { /* EUC文字コード */ $ascii = '[\x00-\x7F]'; # 1バイト EUC-JP文字 $twoBytes = '(?:[\x8E\xA1-\xFE][\xA1-\xFE])'; # 2バイト EUC-JP文字 $threeBytes = '(?:\x8F[\xA1-\xFE][\xA1-\xFE])'; # 3バイト EUC-JP文字 /* マルチバイト文字コード */ $character = "($twoBytes|$threeBytes)"; # EUC-JP文字 if(mb_ereg($character, $string)){ return true; }else{ return false; } } //}}}
あとは、コメントの取得後またはデータ登録の処理前後あたりで
if( !checkMultiBitesString($comment) ){ print "シングルバイトだけです"; // シングルバイトのみだったのでスパムとして扱う }else{ print "マルチバイトを含んでいます"; }
って感じで処理すればおそらく・・・OK。
あとは、REFERERやコメント内のURLやメールアドレスの扱いも若干変えたほうがいいかもしれません。