スパムコメント対策
一応、コメントを受け付けられるように単一投稿ページ等にはコメントフォームを設置してあるものの、まともなコメントをいただくことは全くなくて、送信されてくるのは外国からのスパムコメントばかり。
そりゃそうとわかってはいるのだけど、なかなかうっとうしいものです。
コメントフォームにキャプチャ機能を付けてくれるプラグインを使ってみたところ、スパムは激減、たまにちらほらとそれをかいくぐってくるものがあるぐらいでした。
たまにすり抜けてくるところはIPアドレスをアクセス拒否のリストに加えていって、ほぼ現状ではスパムコメントは0になっています。
しかるに私が使っていたキャプチャプラグインはjqueryを使っているようで、必ずそれに関するエラーが出ていました。
SyntaxHighlighter Evolvedも使っているのでそれも絡んでのことかも。
ただ、エラーがどうも気になるし、できればページの表示を早くするためにもjquery等を起動せずにすむならそのほうがいい。
もっと、簡単に防御対策ができないものかとネットをうろうろして、コメントフォームにチェックボックスを増設する方法を試してみる事にしました。
コメントフォームのあるページのソースを見てみると、hidden属性のinput要素に投稿IDを設定して送信しています。
wordpressはコメントが送信された時にこの投稿IDが無いときは受け付けないようになっているとこのとです。投稿IDがなければどの投稿に送信されたコメントか判別できませんから当然のことです。
そこで増設したチェックボックスがチェックされない時は投稿IDを消してしまって、処理を止めてしまえば良いのではという目論見だったのですが、チェックボックスの値の有無だけで処理を止めてしまってもよさそうです。
ただ、スパムコメントロボットがチェックボックスに関しては何もしないということが前提ですが、その辺りはよくわからないので様子を見るしかありません。
コメントフォームに新たに要素を追加するのはアクションフックのcomment_form_after_fieldsを使えば出来るとの事です。このフックに関しての詳細は、載っているのが英語のページばかりなのであまり読んでいなくてわかりません。
とりあえず見よう見まねで関数を作ればよいと。
<?php
function add_comment_checkb() {
?>
<p class="comment-form-check">
<label>コメント送信時にチェックしてください</label>
<input type="checkbox" name="comment_check" id="comment_check" value="send" />
</p>
<?php
}
add_action( 'comment_form_after_fields', 'add_comment_checkb' );
?>
そしてチェックボックスのチェックの有無で処理を判断するアクションフックはpre_comment_on_postを使えばよいとのこと。
このフックはコメントがデータベースに登録される前に処理されるという事です。
<?php
function my_comment_spam_check( $comment_post_ID ) {
if ( ! isset( $_POST['comment_check'] ) ) {
wp_die( 'ERROR' );
}
}
add_action( 'pre_comment_on_post', 'my_comment_spam_check' );
?>
実際には、ログを残したいのでその処理も入れてあります。
試してみたところちゃんと作動していますから、あとはスパムコメントロボットの出方次第というところです。
この変更を施したのが2012年11月27日。
ただの偶然か、さっそくこの日新顔のスパムコメンターが1件現れてコメントの代わりにログに記録を残しています。
一応、効果はちゃんとありそうですがまだたったの1件ではなんとも言えないかな。
追記:10日以上経った12月9日現在において、合計12件ほどがコメント失敗に終わってログだけ残しています。
ユーザーエージェントを見ると、このうち半数ほどがIPを変えているだけの同一者と思われるTencentTravelerなるブラウザを使っている輩の様。
今のところは全て防ぐことが出来ているようです。
しかし、いつも思うことなのだけどスパムコメントというのはやっていて効果を得る事があるのだろうか。
Post : 2012/11/29 07:45
Comments feed
Trackback URL : https://strix.main.jp/wp-trackback.php?p=28429