ネットワーク関連の記事を順次、別サイトに移動させています

WordPressのスパム対策プラグイン「SI Captcha Anti-Spam」と「Captcha」に注意

ブログ運営
記事内のリンクには広告が含まれている場合があります

最近コメントスパムが多いのでおかしいと思ったらスパム対策プラグインが原因になっていたようです。

コメントスパム

俗にいうコメントによる「荒らし」はサイトやサイト運営者を貶(おとし)めるのが目的ですが、コメントスパムというのはウイルス拡散やフィッシング、違法商品販売を目的として自サイトへの誘導リンクをサイトに表示させることが目的です。

通常はスパムフィルターにより自動で分別されますが、稀に誤判定されるものがあるため目視確認は必要となります。

少しでも目視確認の手間を減らせるように「人」でないと投稿できないように、画像認証や計算認証を追加するWordPressのプラグインが存在します。

「SI Captcha Anti-Spam」と「Captcha」はそんなプラグインでした。

 

SI Captcha Anti-Spam

サイト開設当初から「SI Captcha Anti-Spam」というものを使っていたのですが、どう考えても「人」が投稿するには手間がかかりすぎる数百行にわたるスパムコメントが増えてきたため、別のプラグインを探していたところ「SI Captcha Anti-Spam」が配布終了となっていることを知りました。

2017年6月に所有権が移転し、新しい所有者がバージョン3.0.1と3.0.2に悪意のあるコードを埋め込んだとのことで、修正版のバージョン3.0.3が配信された後、ライブラリーから削除されています。

私のサイトはバージョン3.0.3になっていたのですが、プラグインを停止後、削除しても完全に削除できないとのメッセージが表示されました。

FTPでファイルを調べたところ

  • wp-content/plugins/si-captcha-for-wordpress/captcha/cache

というフォルダーのファイルが削除できなかったようです。

キャッシュということでキャッシュが削除される前に再度投稿することで同じ認証で何度も投稿できるコードが仕組まれていたのかもしれません。

何にしても削除できない場合はFTPでこのフォルダーを削除すれば問題ありません。

  • wp-content/plugins/si-captcha-for-wordpress

おかしな話なのですが「SI Captcha Anti-Spam」を削除してから後述の「Google reCAPTCHA」を導入するまでコメントフォームは認証無しの状態だったのですが、スパムコメントは大幅に減りました。

やはり「SI Captcha Anti-Spam」が導入されている状態は、何かしらの方法でスパムコメントを投稿し易い状態になっているようです。

 

Captcha

「SI Captcha Anti-Spam」が使えなくなりましたので別のプラグインを探したところ「Captcha」がよいとの検索結果でした。

しかし、こちらもバックドアが仕込まれていたとのことで同様にライブラリーから削除されていました。

こちらも2017年9月に新しい所有者に所有権が移ってからバックドアが仕込まれたとのことです。

既に利用されているサイトには自動更新で修正版が配信されているとのことで対策はなされています。

 

結局、何を使えばよいのか

どちらも現状では使えませんので別の方法を使う必要があります。

現状では「Google Captcha (reCAPTCHA) by BestWebSoft」というプラグインを使うのが良いようです。

WordPress-Spam-filter-reCAPTCHA-01

使い方についてはこちらのサイトの「reCAPTCHAの導入方法(コメント欄編)」が詳しいようです。

Google reCAPTCHAという無料サービスを使えるようにするもので、こちらに利用するサイトを登録して「Site key」と「Secret key」を取得する必要があります。

 

reCAPTCHAの問題点

プラグインをインストールして設定すれば、それで完了。

通常はそうなのですが、このreCAPTCHAが使えない場合があります。テンプレートが独自のコメント投稿フォームを用意している場合です。

このサイトで使っているテンプレートもそのような仕様で、最初はプラグインを導入しても動作せず原因が分かりませんでした。

対処方法ですが、テンプレートの「comments.php」を「comment_form()」という関数を使うように書き換える必要があります。

reCAPTCHAを使うにはフォームを表示してるページ(クライアント側)とPOSTを受け取るページ(サーバー側)の両方を修正する必要があります。

通常テンプレートでは表示を変更するためクライアント側だけを変えておりサーバー側の処理はWordPressに丸投げしています。

そのため、サーバー側を修正するにはプラグインを作成できるぐらいの技量を必要とします。

したがって、プラグインを使えるようにテンプレートを修正する方が無難です。

なお、テンプレートが独自のフォームを用意しているのはそれなりの理由があるわけなので、その部分を考慮して「comment_form()」をカスタマイズする必要があるかもしれません。

その方法については、こちらのサイトで詳しく説明されています。

このサイトでの実装は以下のようになっています。

これがすべてではなく、カスタムフォームが記述されている部分をこのように書き換えて、それ以外の部分は文法エラーにならないように元の記述を残すことになります。

実装した状態はコメント欄を見て頂くと分かると思います。

<?php
$comments_args = array(
'fields' => array(
'author' => '<p class="comment-form-author">' . '<label for="author">' . __( 'Name' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label><br /> ' .
'<input id="author" name="author" type="text" value="' . esc_attr( $commenter['comment_author'] ) . '" size="22"' . $aria_req . ' /></p>',
'email'  => '<p class="comment-form-email"><label for="email">' . __( 'Email' ) . ( $req ? ' <span class="required">*</span>' : '' ) . '</label><br /> ' .
'<input id="email" name="email" ' . ( $html5 ? 'type="email"' : 'type="text"' ) . ' value="' . esc_attr(  $commenter['comment_author_email'] ) . '" size="22"' . $aria_req . ' /></p>',
'url'    => '<p class="comment-form-url"><label for="url">' . __( 'Website' ) . '</label><br /> ' .
'<input id="url" name="url" ' . ( $html5 ? 'type="url"' : 'type="text"' ) . ' value="' . esc_attr( $commenter['comment_author_url'] ) . '" size="22" /></p>',
),
'comment_field'        => '<p class="comment-form-comment"><label for="comment">' . _x( 'Comment', 'noun' ) . '</label><br /><textarea id="comment" name="comment" cols="35" rows="10" aria-required="true" style="width: 98% ; "></textarea></p>',
'title_reply'          => 'コメントフォーム',
'comment_notes_before' => '<p class="comment-notes">御不明な点や御質問、御意見についてはコメントを頂けると幸いです。<br />メールアドレスは非公開となり、こちらからメールで御連絡を差し上げることもございません。<br /><span class="required">[*]</span> が付いている項目は必須となりますので必ず入力を御願い致します。</p>',
'comment_notes_after'  => '<p class="form-allowed-tags">内容に問題が無ければ、お手数ですが「私はロボットではありません」にチェックを入れて質問に御回答頂いたあと「コメントを送信する」をクリックしてください。</p>',
'label_submit'         => 'コメントを送信する',
);
comment_form($comments_args);
?>

 

効果

導入の効果は絶大です。スパムコメントは無くなりました。

ただし、導入したら正しくコメントを送信できるかの確認は必ず行ってください。

また、善意のコメントが減る可能性もありますので、状況をみて外した方がよいかもしれません。

 

まとめ

プラグインは一度導入すると問題が起きなければ何もしませんが、「SI Captcha Anti-Spam」または「Captcha」を導入している場合は移行を検討した方がよいでしょう。

コメント

タイトルとURLをコピーしました