本サイトではアフィリエイト広告を利用しています
WordPress でスパムコメントを効率的に排斥する方法

JavaScript WordPress 設定

[小ネタ]WordPress でスパムコメントを効率的に排斥する方法

2024年5月25日

当サイトも例にもれず、WordPress を利用しています。
有料テーマの Affinger にもお世話になっています。

本ページはこんな方におすすめ

  • WordPress のスパムコメントに悩んでいる
  • WordPress にちょっと手を加えてセキュリティを強化したい

当サイトは、かつては記事へのコメント欄を表示していませんでした。

それでも、1日に 2,000 件以上のスパムコメントが書き込まれたこともありました。

スパムコメント

記事の内容についてのコメントではなく、「面白いページだね!私がアンタの助けになるよ」とか、「大学生の私のふしだらなチャットはコチラ」とか、「一獲千金を1週間以内に実現する方法」、「キミのサイトでも100万アクセス獲得できるSEOをコンサルするよ」などのふざけたゴミカキコ(ほとんどが英語でゴミなアンカータグ付き)でした。(上は当サイトの WordPress に投げられた昨年のコメントの一部、念のためゴミリンクは消してあります)

スパマーのコメント投稿方法は見え透いていて、変数を合わせて html のポストをそのまま当サイトの WordPress めがけて送りつけているだけです。

この程度のスパムコメントごときで、ページを閉じるほどでもないのですけど、WordPress 初心者の方はやっぱり悩むようです。

そこで私がやってる、超簡単で、それなりにカッコもつくスパムブロック方法を公開します。

まず、スパムコメントの受信パターンを探る

どうやって、無関係な海外のスパマーが本サイトを見つけてくるのか分かりませんが、本サイトが WordPress で動作していること、そして、コメントを送信するためのフォームが潜在的に隠れていることを、ボットが見つけたのだと考えています。

ボットと言っても、curl(と cron など)を組み合わせた単純クロール&ポストだという感じがしています。

カモサイト・カモ設定を見つけたら、自動でポストするという単純作業が行われている感じです。

WordPress のフォームが単純なので、適当にコーディングしてスパム送信したのではないかと考えます。

ボットが時間を使って頑張ってカモを探しているようで、すべては自動化された攻撃であるように見えます。

少なくとも、標的を絞って当サイトをにしているものでもなさそうです。

なぜ今までうまくブロックできなかったのかを探る

これまで、スパムコメントについては、こまめに対策してきましたが、大して成果もあげられずじまいでした。

多くの WordPress プラグイン(Akismetなど)を試してみましたが、時間がたつとスパムが届き始めました。

ウザったらしい100 KB 超えの JavaScript が含まれているスパムポストも多いです。

CAPTCHA のスパム対策は上手く動くことは確認済みですが、ユーザーにとってはうざったらしいものなので、気軽に書き込める環境を提供したいものです。それは最後の手段にしようと思います。

うまくいった方法を公開

まず最初にやったことは、スパム対策として導入したプラグインを削除していくことでした。

ただでさえ、面倒な作業はプラグイン頼りになってしまう怠け者なので、適当なプラグインが動くなら、私の場合はそれに任せてしまおうとなりがちです。

でも、あまり役に立たないということが実感できたら、これらのプラグインが互いに干渉し合って、更なるスパムが侵入するセキュリティホールを開けかねないので、不要なものは削除するのが基本です。

私が思いついた、超簡単な解決策は、一般的なスパム対策方法の拗らせ版です。

一言で言えば、コメントを投稿するまでは現れない INPUT をフォームを投稿時に追加するだけです。

値は何某らの無意味な値が入っていれば、問題なく投稿できるようにします。

無意味な値がポイントです。今回の例では「1」にしていますが、スパマーに何の意味があるのかわからないようにすることと、無意味にすることで AI に分析させないという意味もあります。

一方、キーが入っていないもの、キーはあっても値がないものは問答無用にはじくようにします。

ただこれだけです。

スパム対策を実装する方法を探る

とにかく、簡単に素人でも実装できる方法で行いたいです。

経験上、それが結果的にサーバーに負荷がかからないケースになることが多いです。

サーバー側で上の入力を処理できれば完璧ですが、ちょっと手間です。

なので、上のフォーム作成は、一番簡単な JavaScript で処理してしまいます。

一方で、コメントを WordPress のデータベースに書き込むまでに php でそのフォームをチェックします。

コメントの内容はチェックしません。確認するのは、先ほどの INPUT のキーだけです。

キーと値が入っていれば、コメントの内容はともかく、ボットではないだろうと判断しています。

[ステップ1]サーバー側は WordPress の function.php を編集する

サーバー側でコメントを受け入れる前に、動的キーの存在を確認する必要があります。 必要なのは isset チェックだけです。

(注:本例では静的キーで実装しています)

WordPress でテーマファイルエディタを使う

まず、WordPress のダッシュボードからテーマファイルエディタにたどり着きます。

WordPress でテーマを直接編集

警告が出ることもありますが、リスクを背負ったうえで作業します。
手っ取り早く、(子)テーマの function.php を編集していきます。
可能な限り、子テーマを編集するようにします。「理解しました」をクリックします。

ftp などで function.php をアップロードしてもいいのですが、WordPress のテーマエディタを利用するのが簡単です。

WordPress でテーマファイルエディタからフェイルを編集する

使用しているテーマの function.php ファイルを選びます。

くどいですが、テーマファイルエディタを使う場合は、親テーマでなく、小テーマの function.php を編集する方が安心です(図のマル3)。

マル1で子テーマを選び、マル2のfunction.php をクリック、マル3でファイルを選べているかどうかを確認し、マル4のコード(下のコード)をペースト、最後にマル5の「ファイルを更新」をクリックします。

使用しているテーマの function.php の最後に、以下のコードを書き込みます。

// スパマーをぶっ潰す!
function preprocess_new_comment($commentdata) {
if(!isset($_POST['is_tooth'])) {
die('<h1>ゴミコメすんな、ぶち殺すぞ! Fuck Off Motherfacker!!!</h1>');
}
return $commentdata;
}
if(function_exists('add_action')) {
add_action('preprocess_comment', 'preprocess_new_comment');
}

このコードで、コメント投稿時に INPUT のチェックに失敗した場合は、コメント投稿を拒否します。

「ゴミコメすんな」の部分はもう少し品の良い言葉に置き換えてあげてください。

もし、編集に失敗して動かなくなった時は、テーマ(子テーマ)を再度インストールしてください。

[ステップ2]ユーザー側には JavaScript で対応する

ユーザー側では、基本的な JavaScript で対応します。

この方式では、JavaScript をサポートしていないブラウザからの善意の人のコメントも拒否されます。

しかし、それは許容することにします。当サイトおよび多くの WordPress サイトはすでに Javascript 無しではまともに表示されないサイトが増えています。

統計的に、サイトを訪れる JavaScript をサポートしないブラウザを使うユーザーの数と、スパマーの数を比較すれば納得できます。

JS をサポートしていないユーザーはほぼゼロで、スパマーの数の方は異様に多いのが現実です。

コメント欄が表示されるページの最後、</body>タグの直前あたりに以下のコードを書き込みます。

<script>
let ext = document.getElementById('comment_post_ID');
window.onload = function () {
ext.insertAdjacentHTML('afterbegin', '<input type="hidden" name="is_tooth" value="1">');
};
</script>

当サイトの場合は WordPress のテーマとして Affinger を使用しているので、WordPress の「Affinger 管理」から「その他の設定」に進み、「上級者向け」、「コードの出力」の場所に「</body>直前に出力するコード」の欄に、コードを書き込みます。

Affinger body タグ終了直前にコードを置く

送信時に上のキーを追加しても、これまでのところ(ブラウザ別に調べても)問題は生じていません。

WordPress テーマに Affinger を使っていない方は、直接テーマの single.php を編集してコードを書き足しても、同じ効果が得られます。

コードをテストしたり外したりするなら、 Affinger はお奨めのテンプレートです。

ACTION PACK3(AFFINGER6EX対応)

WordPressテーマ 「ACTION(AFFINGER6)

おすすめWPテーマ

今のところ成功

この設定をしてから、意味のないスパムコメントは激減しました。ほぼほぼゼロです。

ゼロコメントが続いてしまうと、「全部のコメントを閉じてしまったのでは?」と逆の意味で心配しましたが、問題はなさそうです。

簡単な対策ですが、ボット対策には効果抜群であることは証明済みです。

もちろん、悪意のあるターゲットを絞った攻撃の場合、この程度の防御だと不安ですね。

ACTION(AFFINGER6)

AFFINGER EX環境セット

AFFINGER はプラグイン込の方が有益

スパムが増えたらまたコメント欄を非表示にするだけです

WordPress でコメント欄を非表示にする

WordPress でコメントフォームを非表示

Affinger でコメント欄を非表示にする

Affinger でコメントフォームを非表示


関連記事
[小ネタ] WordPress で「サーバーが画像を処理できません」に対処!
[小ネタ]WordPress で「サーバーが画像を処理できません」に対処!

WordPress にメディア画像をアップロードできず、小一時間ほど悩んだ話です。小ネタです。 本ページはこんな方におす ...

続きを見る


関連記事
[小ネタ]WordPress の投稿記事で onClick 属性が消えてしまう問題を即席解決!

本ページはこんな方におすすめ WordPress 投稿で onClick を使いたい WordPress 投稿で dat ...

続きを見る


関連記事
[小ネタ] WordPress で「サーバーが画像を処理できません」に対処!
[小ネタ]WordPress で「サーバーが画像を処理できません」に対処!

WordPress にメディア画像をアップロードできず、小一時間ほど悩んだ話です。小ネタです。 本ページはこんな方におす ...

続きを見る


関連記事
WP Memory Limit
[WP]Memory Limit、WordPressのメモリ不足解消!

WordPress でカッコヨいいテーマにプラグインをインストールしたりすると、サーバーのメモリ不足に悩まされることにな ...

続きを見る

-JavaScript, WordPress, 設定
-, ,