bass-inu's blog

非IT企業Web担当者の孤独な雑記

コメントスパム対策!日本語を使用していない投稿を拒否

オープンソースCMSである「baserCMS」でサイト構築したんですが、
設置したブログからさっそくコメントスパムが…

最近のスパムってやつは、意味のない英語文字列だけ打ってきたりするんですよね。
何の意味があるのか…。
それだけなら半角英数のみの投稿を弾けばいいんだけども、巧妙に全角スペース1文字入れてきたりする。
キィーッ(#・∀・)


ということで、正規表現を用いて
全角文字(日本語)を連続2文字以上入れないと投稿できない!
としてみます。
国内向けサイトなので、普通にコメントすれば自然と2文字以上は入力するでしょう。
当然ですが日本語のスパムは防げません…。


今回はbaserCMSの例でやりますが、あらゆるフォームで応用出来ると思います。
やり方はわからないけど(笑)

下記ファイルを編集

/baser/plugins/blog/models/blog_comment.php

'message' => array(
array(	'rule'	=> array('notEmpty'),
'message'	=> "コメントを入力してください。")
)

この部分を、

'message' => array(
array(	'rule'	=> array('custom','/[ぁ-んァ-ヶー一-龠、。!?]{2,}/u'),
'message'	=> "コメントを入力してください。")
)

と変更します。

説明

ぁ-んァ-ヶー一-龠、。!?

この部分が許可する文字の範囲。
ひらがな、カタカナ、漢字、句読点、ー!?


数字も許可範囲に入れたいって場合は、0-90-9を追記する。

二字熟語が入っていれば許すって場合は、一-龠のみにする。ひらがな、カタカナのみの投稿はお断り。大人向け(?)

{2,}

上記範囲内の文字を2回以上繰り返せばOKという意味。
50文字未満のコメントなどコメントではないという場合は、{50,}とすれば完璧です。ハードルの高いサイト向け。

動作確認

こちらを使わせていただきました。
preg_match()正規表現チェッカー
正規表現の欄に「/[ぁ-んァ-ヶー一-龠、。!?]{2,}/u」と入れて色々な文字列でチェック!

baserCMSについて

シンプルで使いやすいCMSです。
ファイル構成がわかりやすく、私のようにあまりプログラムがわからない人にも優しめ(^O^)

baser CMS - 国産オープンソース!フリー(無料)で『コーポレートサイトにちょうどいいCMS』