【WordPress】コピペだけで超強力なスパムコメント対策を施す方法

パソコンが得意で、中学生のときワードプレスプラグインを作ったこともあるポクくん(@poku_kun)です。

このブログはワードプレスで運営しているのですが、コメント欄には大量のスパムコメントが送られてきます。スパムコメントを削除するのは面倒くさいですし、さらにそれらを放っておけば、Googleにスパムサイトだと判断され、SEOに深刻な影響を与えかねません。

このブログはコメント時にメールアドレル不要で手動承認もなしで、スパムコメント対策のプラグインも導入していないというスパムコメントには弱い状況です。しかしながら、独自で開発したスパムコメント対策を施しているので、これまでにスパムコメントが投稿されたことは皆無です。

その独自のスパムコメント対策がスパムを防いだ回数をデータベースに記憶させているのですが、ブログ開設から1年半足らずで、すでに17600個以上ものスパムコメントを防いでいます。

スパムコメントを防いだ回数は16000回以上
この対策を施していなければ1日30件のスパムコメントが来ていたかと思うと恐ろしいです

この独自のスパムコメント対策ですが、プラグインを使わずにコピペのみで皆さんのワードプレスサイトに実装できます。そこで、今回はそのスパムコメント対策のコードや仕組みを紹介します。

WordPressの超強力スパムコメント対策

functions.php編集時の注意

今回紹介するスパム対策のコードはテーマのための関数(functions.php)にコピペ(コピー&ペースト)することで使えます。functions.phpは重要ファイルのため、記述や保存方法次第ではサイトにアクセスできなくなる危険があります。functions.php編集の際は以下のことを注意して、慎重に作業してください。

  • 作業前にfunctions.phpのバックアップを取る
  • 元からあるコードを削除しない
  • できるだけFTPを使って編集を行う(管理画面の「テーマの編集」から編集するのは非推奨)
  • Windows付属のメモ帳で編集することは不可
  • TeraPad」等のエディタソフトを使う
  • ファイル保存時の文字コードはUTF-8(BOMなし)、改行コードは「LF」
  • 編集後はサイトの動作確認を行う

スパムコメント対策のコード

以下のphpコードの/*スパムコメント対策コード(始)*/から/*スパムコメント対策コード(終)*/の部分をコピーして、お使いのワードプレステーマのfunctions.phpの最後に貼り付けるだけで使えます。冒頭の<?phpは不要なので注意!

コードの内容が理解できる方は自由にカスタマイズして使っていただいて構いません。

スパムコメント対策の仕組み

スパムコメントかどうかを判断するためには、以下の5つの判断基準を用いています。

※ワードプレスにログインしているユーザーには、スパムコメント対策は働きません。

ひらがなの含まれないコメントをブロック

スパムコメントの大半は英語などの外国語なので、日本語が含まれないコメントはスパムとみなします。

※これによりスパムでない英語の問い合わせなどもブロックとみなしてしまいます。

ブラウザ設定言語が日本語でない場合ブロック

ブラウザの設定言語に日本語(ja)がない場合、スパムと見なします。これで海外から送られてくるスパムコメントの大半はブロックできます。

※これによりスパムでない海外からの問い合わせなどもブロックとみなす可能性があります。

古いIEからのコメントブロック

中国からのスパムコメントの多くはInternet Explorer6(IE6)でアクセスしているようなふりをすると聞いたことがあります。そこで、現在一般的にはほぼ使われていないIEのバージョン8以前からのコメントはスパムとみなしてブロックします。

URL数の制限

スパムコメントのほとんどには宣伝やウイルス感染させるようなURLが多数含まれています。そこで、コメントに含まれるURL数を制限して、それより多い場合はスパムとみなします。

URLの許容数はコメントの長さに応じて1~4つまで変化します。

コメントの長さ 許容URL数
50字未満 1つ
50~199字 2つ
200~499字 3つ
500字以上 4つ

ページ読み込み後10秒未満で送信されたコメントをブロック

ブログのページが読み込まれてから10秒が経過してから送信されたコメントのみスパムでないとみなします。逆に、ページが読み込まれてから10秒未満で送信されたコメントはブロックします。

この機能にはJavaScriptを使用しているのですが、ほとんどのスパムコメント送信ロボット(BOT)はJavaScriptを動作させることができないので、スパムと判定されます。JavaScriptの動作する高度なBOTがあったとしても、10秒の時間制限によってスパムと判定されるでしょう。

また、10秒の制限は手動でのスパムコメントにも一定の効果があると考えています。

スパムコメント判定時の動作

コメントがスパムだと判定された時は以下のようなエラーメッセージが表示されます。

スパム判定時のエラーメッセージ
通常のコメントがスパムと判定されて投稿できなくなるのを防ぎます

この方法のメリットとデメリット

私の独自の独自のスパムコメント対策には以下のようなメリットがあります。

  • スパムコメントをスパムだと認識できる精度が非常に高い
  • 認証欄は用いておらず、ユーザーに手間をかけさせない
  • データベース等に一切アクセスしないので、軽快に動作する
  • Akismet等の重たいプラグインを使う必要がなくなる

一方で以下のようなデメリットもあります。

  • functions.php編集を必要とする
  • 日本語サイト限定
  • 実際にどれくらいのスパムをブロックできているのか分かりにくい

ちなみに、これらのデメリット解消のためにプラグインとして公開することも考えています。

ポクくんのまとめの一言

動作確認は繰り返しているつもりですが、不具合や改善点等あればコメントで教えてほしいです!