ホーム > アーカイブ > 2009年3月25日のアーカイブ

2009年3月25日のアーカイブ

JavaScript でスパム投稿対策

[`evernote` not found]
[`grow` not found]
[`livedoor` not found]
[`yahoo` not found]
Delicious にシェア
このエントリーをはてなブックマークに追加

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 を変えるまでです。
その間にも着々とブラックリストは更新されていきます。

ホーム > アーカイブ > 2009年3月25日のアーカイブ

Ad
Apache
MySQL
PHP
お気に入り
ん。。。。。。広告
アーカイブ
Ad

ページの上部に戻る