2009年9月11日金曜日

cakePhpのサイトでSpam投稿に対処する(Ajax,captcha-php,mechanize)

tak512dです。SEOの関連でサイト分析していて散見されるのが
Botによる投稿。担当しているサイトで3000件を越える書き込みが
そのままになっていました。これはまずい。

ひとまず以下の対処を行うことにしました。
1.画像認証(captcha)を設置する。
2.Ajaxで入力動作を監視する。
3.ダミーの入力欄を用意して監視する。

1.画像認証(captcha)を設置する。
cakePhpで利用しやすい状態になっていたライブラリを利用しました。
解説はこちらを参考にしました。(captcha-php)
リンク先に書いてあるDL先はこちらに移動した模様です(http://milki.erphesfurt.de/captcha/)
それから実際のライブラリ(secureimage)もDLします。注意点として、tar.gzとzipがありますが
tar.gzをDLしてください。内容が違います(2009/7/28)。解説で張ったリンクのページで動作する
サンプルをフォルダ丸ごと配布してくれたので解決しましたが、かなりはまりました。

2.Ajaxで入力動作を監視する。
Captchaの入力欄を監視、キーボードからの入力か判定します。
ソフトウェアキーボードを使うと蹴られるので注意が必要です・・・。

3.ダミーの入力欄を用意して監視する。
hide属性の入力欄nameを用意しました。
Botは基本的にFormの入力項目名に合わせた内容を入力してきます。
mechanizeで作成したBotで書き込む時には「.*name」を含む項目には名前を入力する傾向にあります。
Bodyという本文の入力欄を使っているとタグを使った文章を入れてきますので分かりやすいです。
(mechanizeの解説はこちら「今日のCPANモジュール」を参考にしました。)

恐らくですが、名前やメールなどの予想される入力項目全てを網羅したスクリプトが稼動しているのでしょう。
nameに値が入ったらまともな人間じゃないですよね。hideなんですから。
(解説していたサイトのアドレスを無くしました・・・。不義理を許してください。orz)

追記(2009/9/15)
解説してたサイト「UnderDone(あんでるどん)

0 件のコメント:

コメントを投稿