Wordpressサイトのfunction.phpにコピペするだけで動作するコードのご紹介です。
ふだん制作しているサイトは企業のサイトなどでコメント機能はオミットしているのが当たり前になっています。
コメント機能が有効になっているサイトを制作することはあまりないのですが、ココナラの案件には個人のサイトやコミュニティとしてサイトを利用している場合など、コメント機能を活用することもあると感じました。
ということでちょっとスパムコメント対策を考えてみました。
プラグインは導入が簡単
まずオーソドックスなのがAkismet Anti-Spamというプラグインですね。
Automattic社が開発しているプラグインですが、 Automattic社はWordpressの開発をしている会社で、これ以上ないくらい超オフィシャルなプラグインということになります。
なのでWordpressに最初から入っていたりします。
Akismet Anti-Spamのメリット
・導入が簡単
・公式プラグインで安心
・スパム検出率が高い
・非営利サイトなら無料で使える
これらメリットは言うまでもないですね。
特にスパム検出率はかなり高いほうだと思います。
Akismet Anti-Spamのデメリット
・それなりに重い
・営利目的のサイトだと有料
・誤検出がある
このプラグイン、ブロックするわけではなく投稿自体はなんでもこいで受け止めてくれます。なんという包容力でしょう。
次に受け取ったコメントの中身をチェックしてスパムへ振り分けを行います。
コメントの文字列チェックして自社が持ってるデータと照合してスパムかどうかを判定する、こんな処理が軽いわけはないですよね。
スパムコメントの餌食になってしまっているURL(コメント機能が解放されているWordpressサイトはURLリストが裏で出回ってたりします)だと毎日何百とコメントが送信されているのでサーバーへの負荷もそれなりに高くなると思います。
そして商用利用だと無料で使えません。
この商用利用というのがクセモノで、ECサイトは当然ですがアフィリエイトや自社サービスの紹介をしているだけのサイトでも営利目的の商用サイトとなります。
違反しているサイトのAPIは剥奪しているとかいうウワサもあります。
(プラグインがインストールされたサイト内にアフィがあるかどうかチェックするのは容易いことなので見過ごされているだけだと思います。おそらくAIの学習データを集める礎にされているのではないかなと。いつか本腰入れて違反対策してくる可能性もあります)
また、誤検出もやっぱり発生してしまいます。
コメント文中にURLが入っているとスパム判定される確率が上がるようです。
重いし規約違反だしそもそも振り分けをしてくれるだけで実際は手作業で削除する必要があるので、自分はこのプラグインを使おうとは思いません。
続いて有名なのがGoogleのreCAPTCHA。
これ自体はWordpressのプラグインではありませんが、Wordpressに導入するプラグインがあります。
Google謹製のプラグインで導入しているサイトが非常に多いです。
無料で商用利用可能なので企業でもよく導入されています。
(実際は月間あたり呼び出し100万回までが無料です)
仕組みとしてはBotを検出して弾くものになっており、フォームのURLを開いて内容を入力して送信するというプロセスにおいて、人間ではありえない速度で進めるとBotと判断されたりします。
Botとは人間のタスクを模倣してパソコンにやらせる自動化プログラムです。
1分で100回とかとんでもないコメント数を投稿することもできます。
精度が高くほぼ100%のBOTを弾いてくれます。
このようにBot対策において強力なreCAPTCHAですが、デメリットもあります。
・ページ表示が遅くなる
・有効なのはお行儀のいいBotのみ
ページを開くたびにGoogleへ呼び出しを行うのでページの表示が遅くなります。
1ページもののLPなどページコンテンツとフォームが同じページ内に設置されていると気になる遅延となるかもしれません。
また、フォームページを介して送信してくるBotが対象となるので、POSTされたフォームを受け取るプログラム本体を直接叩いてくる行儀の悪いBotには無力です。
上図では一日10件くらいを100%弾いていますが、実際にはすり抜けて何件かのスパムコメントがあります。
コピペで動作するスパムブロックコード
では本題です。
このコードの仕様は以下の通りです。
・Wordpressサイト用
・function.phpに実装
・フォームページ(人間相手)ではjavascriptで入力チェック
・wp-comments.phpへの直接アタック(Bot相手)はフックでチェック
・コメントのチェックは日本語かどうかで判定
日本語で送ってくるスパムコメントは防げません。英文Bot専用です。
今のところ日本語のスパムはほとんど見たことがないので、大半のスパムは防げると思います。
・画面遷移なしでエラーメッセージを出せる
デフォルトだとエラー時はこのような味気ない画面になりますが、
フォームページにエラーメッセージを表示します。
contact form 7のバリデーションチェックと似たようなやつです。
・フォーム内に好きな文字列を表示できる
送信ボタンの直前に好きな文字列を差し込めます。
ご注意:
・Wordpressのバージョンが古すぎると動作しないかも
・インストールされているテーマがコメントフォームに何らかの手を加えていると動作しないかも
・function.phpの編集について経験がありリスクも知っている前提
・自己責任
・ここまでの説明で何言ってるのか見当もつかないというのであれば、案件として当方にご相談ください
以下、コードになります。
区切り線の中身だけコピペしてください。