ZAPAnet総合情報局 > ZAPAブログ2.0 > スパム対策第2弾

スパム対策第2弾

2007年02月17日 プログラミングTIPS
一向に減る気配を見せない世界中での「スパム」。
スパムメール、スパムコメント、スパムトラックバック…。

このブログでは、スパムトラックバックの被害はあまり受けていませんが、スパムコメントはたまに喰らっています。
Nucleusにもスパムコメントが!」で実施したスパム対策のおかげで、対策後からはごくまれにしかスパムコメントを喰らっていませんでした。
ところが、昨年末辺りから、この対策をくぐり抜けて再びスパムコメントが書き込まれるようになっていました。

というわけで、スパム対策第2弾!

前回のスパム対策は、「投稿前のチェックボックスを一つ追加」することでした。
これにより、自動スクリプトによるコメントスパマーの投稿を防ぐ対策でした。
ところが、最近はこの「チェックボックス作戦」が破られるようになっていました。(チェックボックス一つだと、オンかオフかの2分の1の確率なので、破られやすかったようです)

次の対策を考えるために、まずはこのスパムコメントの特徴をまとめておきます。
・投稿者のHNが日本語ではない
・投稿内容が英語でどこかのサイトへのURLが書かれている
・投稿時のIPアドレスが毎回異なる
・継続的だが不規則な投稿サイクル
やっかいなのは、「IPアドレスが毎回異なる」という点で、IPアドレスの指定ではスパムコメントに中々対処できません。

前回の対策時に、もし対策が破られた場合は、以下の対策などを考えていました。
・半角のみの投稿制限
・複数URLの書き込み制限
・禁止語句制限
・投稿前にランダムに文字列画像を生成して、その文字列を投稿者に入力してもらう
・投稿前に「ひらがな文字」を入力してもらう
最近は、スパムコメント内容に全角文字が含まれるようになっていたりもして、スパムも進化しています。
禁止語句制限もあまり有効とは思えず、複数URLの書き込み制限は、スパムではない普通のコメントまでも弾いてしまう問題があります。
「ランダムに文字列画像を生成」する方法は、他のサイトでもたまに見かけますが、サーバー側に画像生成負荷がかかることと、画像の文字が読みにくく、コメント投稿者に負担がかかってしまうのが問題です。
自分としては、「ひらがな文字を入力してもらう」方法が一番スパムを防げると思っていますが(例えば、テキスト入力欄を一つ用意して、「おーけー」と書いてから投稿してください、などと促す方法)、これもコメント投稿者に負担がかかってしまうので、自動でスパムを防ぐ方法を考えてみました。


それは…

formのhidden属性を増やして騙す方法!

単純にコメントフォームのhidden属性を増やして、その内容をチェックする方法です。
今までのスパムコメント対策用のチェックボックス一つだけだと、スパムスクリプトに見破られてしまいます。
そこで、hidden属性を増やすことで、スパムスクリプトを騙すというわけです。
今現在、テスト用に以下のhidden属性を追加しています。
<input type="hidden" name="mail" value="あいうえお">
<input type="hidden" name="address" value="">
hidden属性なので、普通のコメント投稿者には全く影響しない内容になっています。
ところが、スパムスクリプトは適当にhidden属性を書き換えるか、hidden属性を無視する可能性があります。
今回のテスト内容で言えば、もし「mail」に”あいうえお”以外が入力されていたら、コメントできないようにしています。
また、「address」に何か変な文字が入っていた場合にも、コメントできないようにしています。
このスパム対策の良いところは、通常のコメント投稿者には一切負担を与えることが無く、hidden属性の追加や変更などが簡単なことです。(コメント投稿時のエラー処理は多少書き換える必要がありますが)

実際、この新しい対策をしてから1週間のスパムコメント数は…0
対策前は毎日のようにスパムコメントがあったので、確実に効果があったようです。
(追記:昨日、一昨日は1件ずつスパム投稿がありました)

今回は導入しませんでしたが、javascriptを利用してhidden属性の値を与えるようにすれば、かなり確実にスパムコメントを防げるようになると思います。(ただし、javascriptオフの環境でコメントできなくなってしまうため、今回は見送りました)

スパムコメントに悩んでいる方は、「hidden属性を増やして騙す方法」を取り入れてみてください。


今回の対策でもまだダメ内容なら、CSSを使って見えないフォームで騙すか、BBQやAkismetを導入してみようかと思います。


関連リンク:
Nucleusにもスパムコメントが!
F-boardはスパム攻撃を受け、配布元PHP-Jは閉鎖
F-boardのスパム対策のその後
ライブドアブログのスパムは防げない