PHPの基礎体力掲示板の話です。
最近は UA に MRA 4.3 を含んだPOSTのアクセスが目立ちます。
多い日は1日250件くらいあります。
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; MRA 4.3 (build 01218))
MRA 4.3 ってなんでしょうね。まあ
スパム投稿のUAなんで気にすることもありませんが。
正規のフォームを介すことなく、
直接ターゲットの URL に POST しているので
ロボットによる自動投稿だと思われます。
ブラックリストをつくって、IPや投稿内容でフィルタリングしてはいますが
新らしいHOSTやパターンが現れると、その度に
投稿を削除して、リストを更新してとかなり面倒です。
新規投稿以外は、Javascriptでフォームを表示してるおかげで
スパム投稿はまったくありません。
アホなロボットがJavascriptを解釈してまで
投稿してこないだろうと読んだのは正解でした。
新規投稿についてもJavascriptで対策できそうだなと思い
試したところかなり効果があったので紹介します。
要点は、フォームの action にダミーの URL を指定しておき、
送信直前に DOM で action を正しいURLに書き換えるわけです。
これで正規のフォームからの投稿だけが受け付けられます。
フォーム側はこんな感じ。加えて下のJavascriptをロードしておきます。
<form id="postForm" method="post" action="/badPost" onSubmit="return validateForm()">
*
* この /badPost はダミー
*
</form>
post.js (prototype.jsを使ってます)
function validateForm()
{
// フォームの送信先を正規のURLに変えます。
$('postForm').action = "/post';
return true;
}
ダミーの /badPost ですが、実際は
ブラックリストを更新するスクリプトにしておきます。
人の目で post.js を見て投稿先URLを変えられるとそれまでですが
新規投稿以外のPOSTアクセスが無いことからすると
業者もJavascript までは見てないようです。
導入して3日経ちましたが今のところ100%排除できています。
もし投稿してきたら、こちらも URL を変えるまでです。
その間にも着々とブラックリストは更新されていきます。
タグ: スパム
普通のブラウザでフォームページをリクエストすると
このページに付随するファイル(画像、StyleSheet、JavaScriptなど)も
あわせてリクエストがあるものですが
フォームを収集してるロボットはこの痕跡がまったくありません。
JavaScriptを収集してないのでJavaScriptでフォームを表示してる限りは
フォームを獲得を阻止出来てスパム投稿もありません。
インラインでJavascriptを書くと解析を楽にしてしまうので
Javascriptは別ファイルにすることがポイントです。
素晴らしい!
けど普段セキュリティ対策のためJavascriptを切って
ブラウジングしている「人間」もいることも忘れないで!