ブログサイトをふらふらしていたら、気になる記事を見つけました。
ここ数日、ボット達の活動が賑やかですね。どこかのお国のスパマーが世界中に伝染させたゾンビを目覚めさせたのでしょうか?SpamKarma殿が頑張ってくれているのでほとんどは防いでくれているので表面上は問題ないのですが、アクセスログを見ると、wp-comments-post.phpを直接叩かれまくっていることに気が付きました。
さっそくサーバー会社のサービスでアクセスを確認してみると、アクセスランキング1位が wp-comments-post.php !
上記の記事では Apache の Rewrite を使った対策を紹介しています。コメントの投稿は記事ページから POST で送信されるのが本来の形ですが、スパムの場合は記事ページを飛ばして直接アクセスしているようです。この違いを利用した次のコードが掲載されています。
- RewriteEngine On
- RewriteCond %{REQUEST_METHOD} POST
- RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
- RewriteCond %{HTTP_REFERER} !.*ブログのドメイン.*
- RewriteRule (.*) http://%{REMOTE_ADDR}/
参考にしたという Codex のコードは、恐らくこれだと思います。
- RewriteEngine On
- RewriteCond %{REQUEST_METHOD} POST
- RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
- RewriteCond %{HTTP_REFERER} !.*yourdomain.com.* [OR]
- RewriteCond %{HTTP_USER_AGENT} ^$
- RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
どちらも、直接アクセスしてきていたら送り返すという点は一緒です。
Codex のほうは、リファラが正しくてもユーザーエージェント情報が得られない場合はスパム扱いにするという点(4~5行目)と、送り返すときのステータスがデフォルトの302(一時的なアドレスの変更)ではなく301(恒久的なアドレスの変更)になるようにしている点(6行目)が違います。後者の記述は、次回のスパムアクセスの時に実際のサイトを見に来なくなるという効果があります。
さて、セキュリティソフトの中にはリファラをカットしてしまうものがあります。また、同じ機能を実装しているブラウザもあります。カットされた場合は4行目のところでスパムと判定されてしまうため、そのパソコンからはコメントの書き込みができません。これでは困りますので、リファラが空の場合はスパム扱いしない処理が必要になってきます。次のコードを4行目に入れればいいかと思います。
- RewriteCond %{HTTP_REFERER} !^$
ただ、スパムコメントを行うプログラム(通称ロボット)がリファラをちゃんと返すのかという問題があります。恐らく返さないでしょう。すばやい動きをするために、なくても困らない処理は初めから入れていないはずです。少なくとも、私だったら入れません。
試してみましたという内容にするつもりだったのですが、袋小路に自分から飛び込んでしまったようです。効果を期待しないで試してみます・・・。
試すコードは、次のようにしました。
- RewriteEngine On
- RewriteBase /
- RewriteCond %{REQUEST_METHOD} POST
- RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
- RewriteCond %{HTTP_REFERER} !^$
- RewriteCond %{HTTP_REFERER} !.*yoshitomo.org.*
- RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]