ブログ(WordPress)のコメントスパム対策
ブログをやっているとコメントスパムに悩まされる。コメントスパムをどのように対応しているか、自分の事例を挙げてみた。
ブログは書いているときは楽しいし、ソーシャルネットワークとの連携をしたりなど前向きな設定や管理をしているときはノリノリでやっている。だが、コメントスパム対応は気がめいってしまう。だからといって、コメントスパムを対応しなくてはブログが荒れた裏路地のようになってしまう。
できるだけ手間はかけてくないが、コメントスパムをブログに表示しないようにしたい。そのための設定をあげてみる。
プラグインの導入
WordPressには優秀なスパムコメント対策のプラグインがある。まずはそれを設定する。「WP-SpamFree」を有効にしておけばあるていどのコメントスパムを防ぐことができる。
コメントを承認制にする
スパムコメントを絶対に表に出したくない場合はこれが一番いい。コメントは必ず承認を経るようにする。承認作業が面倒だが、コメントスパムが表に出てブログが荒れるよりはましだ。承認のときにスパムコメントは「スパム」に振り分けていくという作業を続けていく。すると、あるていどのスパムコメントがたまってくる。たまったスパムコメントの中から、頻繁にアクセスしてくるスパマーをアクセス拒否にするために次にステップに移る。
.htaccessによる制限
ブログの「.htaccess」ファイルにIPアドレスを指定して拒否することにより、ブログそのものへのアクセスを制限してしまう。ここで承認作業のときに「スパム」に振り分けた行為が生きてくる。スパムに振り分けられた投稿のIPアドレスを拾っていって、件数の多いものを制限してしまうのだ。その作業はWordPressの管理画面から手作業で拾っていくのもいいが、件数が多いと時間がかかってしまうし面倒だ。そこで、データベースにアクセスして直接クエリーを実行して抽出する。
MySQLの管理ツールからSQLを実行できる画面にアクセスして次のクエリーを実行する。すると、スパムに振り分けられたコメントのIPアドレスと件数を表示できる。
SELECT comment_author_IP, COUNT( * )
FROM wp1_comments
WHERE comment_approved = 'spam'
GROUP BY comment_author_IP
* 「wp1_」の部分は設定によって異なっている場合がある。
第2オクテッドあたりまで指定して抽出する場合はSUBSTRINGを使って最初から8文字目ぐらいまでを指定して抽出する。
SELECT SUBSTRING( comment_author_IP, 1, 8 ) , COUNT( * )
FROM wp1_comments
WHERE comment_approved = 'spam'
GROUP BY SUBSTRING( comment_author_IP, 1, 8 )
HAVING COUNT( * ) > 1
出力された抽出結果を見て、特に件数の多いIPアドレスを拒否設定にする。ブログフォルダーの中にある「.htaccess」ファイルに次のような設定を追加する。
order allow,deny
allow from all
# 拒否設定
deny from 66.219.17.212 # 第4オクテッドまで指定する場合
deny from 67.159.37. # 第3オクテッドまで指定する場合
deny from 173.208. # 第2オクテッドまで指定する場合
「# 拒否設定」以下に拒否したいIPアドレスを「deny from」で指定することでアクセスを拒否することができる。極力第4オクテッドで指定したほうがいいが、場合によっては第3オクテッド、第2オクテッドまでさかのぼって指定したほうが効率がいい場合もあるだろう。そこまで上のオクテッドで指定するとスパマー以外の純粋な読者にあたってしまう確率が高くなってしまうかもしれないので、設定は慎重に行ったほうがいい。
せっかくの読者がスパマーのためにアクセスできなくなってしまっては何のためのスパムコメント対策なのかがわからなくなってしまう。
日本の読者しか対象にしないと割り切れるなら「allow from」で日本のプロバイダーのドメインをすべて指定するというホワイトリスト方式にする方法もあるが、世界にいる日本人や日本語を読めて日本語のブログに興味を持ってくれている外国人を排除したくないのであれば、スパムコメントの多いIPアドレスを拒否するブラックリスト方式のほうが適切だろう。