ブログや掲示板への国外からのスパムで悩む・・・なんてことが多いと思うんですが。
今回は、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やメールアドレスの扱いも若干変えたほうがいいかもしれません。
12月 13 2006
PHP系の掲示板でマルチバイトを含まない投稿をスパムとして扱う
ブログや掲示板への国外からのスパムで悩む・・・なんてことが多いと思うんですが。
今回は、PHP系の掲示板限定(Perl互換の正規表現なので流用可能)で、コメントにマルチバイトを含まない場合の排他処理の部分をメモ。
他にもスパム対策として有効な方法はありますが、とりあえず導入が楽なので。
あとは、コメントの取得後またはデータ登録の処理前後あたりで
って感じで処理すればおそらく・・・OK。
あとは、REFERERやコメント内のURLやメールアドレスの扱いも若干変えたほうがいいかもしれません。
By KYO • HTML, PHP