Webエンジニアブログのコメントスパム対策
プラグインを利用しないコメントスパム対策
コメントスパム対策はfunctions.phpを使って手軽にできる。
アクセス数が増え始めた頃から英語のコメントスパムが増加してきました。その後、リンクが記述されている日本語のコメントスパムも増えてきました。
Webエンジニアブログでは、以下のコメントをスパムとして
- 日本語を含まないコメント
- アンカータグ(a href=””)を含むコメント
データベースに保存することなくエラーを返す
ようにしています。
日本語(ひらがな)を含まないコメントを除外
日本語を含まない英語だけのコメントをエラーにする方法をWebで検索したところ
上のURLに書いてある方法で英語のスパムコメントをとりあえず除外することにしました。
アンカータグを含むコメントを除外
上のURLに書いてあるコードにプラスして、アンカータグを含むコメントを除外するためのコードをプラスして、以下のコードをfunctions.phpに追加しました。
function spam_to_error( $comment_post_ID ) { // 日本語を含まないコメントを除外 if ( isset( $_POST['comment'] ) && !preg_match( "/[あ-ん]+/u", $_POST['comment'] ) ) { wp_die( __('<strong>ERROR</strong>: please type a comment in Japanese.') ); } // アンカータグを含むコメントを除外 preg_match_all("/<a.*?href=[\"']?(.*?)[\"']?.*?>(.*?)<\/a>/i", $_POST['comment'], $href); if( count($href[0]) > 0 ) { wp_die( __('<strong>ERROR</strong>: do not type anchor tag.') ); } // URLを含むコメントを除外 //preg_match_all("/(http|https):\/\/[a-z0-9\/\-_\.]+/i", $_POST['comment'], $http); //if( count($http[0]) > 0 ) //{ // wp_die( __('<strong>ERROR</strong>: do not type url.') ); //} } add_action( 'pre_comment_on_post', 'spam_to_error' );
最後のコメントアウトされたコードは、URLを直接入力したコメントを除外するコードになります。現在のところ、Webエンジニアブログでは、コメントした状態にしてあるが、URLを含むコメントをエラーにしたい場合はコメントを削除することで有効にすることができる。