スパムや掲示板自動書き込みツールの対策
掲示板を設置しているサイトオーナーさまにとって悩みの種である
コマーシャル投稿ですが、
それだけではなく、世の中には掲示板に対して自動的に記事を投稿するツールが存在します。
そういった品の無いツール(スクリプト)をDukeと呼ぶのだそうです。
本来は禁止している記事(コマーシャルなど)が書き込まれたときだけ削除すればよいはずなのに、
そういったツールが現れたことで、
さらに大量に不要記事が増えることになりました。
私は、1週間に1回程度の掲示板チェックが限界なのですが、これが原因で毎日2〜3回は
スパム記事の削除をしなければならなくなりました。
メンテナンスにも限界がきて、結局は掲示板への投稿機能だけを停止(過去ログの閲覧だけできるように)するはめに・・・。
DoS攻撃に対するトラフィックの軽減は泣くしかないとしても、せめて
メンテナンスの手間をできるだけ減らしたいと思います。
さてまずは、私のサイトで行われたスパム記事に関するログから抜粋して、今後の対策の材料とするために、ここに記録しておきます。
[タイプ1:ブラウザからコマーシャル書込みされた場合]
単なるコマーシャルは可愛いものです。一生懸命に手作業で記事を投稿してくださるからです。
投稿者は自分の時間を使って記事を投稿しているわけですから、その報酬として数日の猶予は与えても良いでしょう(笑
HTTP_USER_AGENT : 投稿者のブラウザ情報
HTTP_REFERER : 投稿ページのURL
記事内容 : FORMから入力した記事
対策 : 投稿者のIPアドレスを元にして、少々幅を持せたIPアドレスからの投稿を拒否。
ただ、正当なユーザまで排除してしまう可能性があるので、手作業でのメンテナンスとして対処するべきなのかもしれません。
[タイプ2:HTTP_USER_AGENT偽装]
スレッド型の掲示板に、過去の記事に対してレスポンスを付ける形で投稿してきました。
スレッド型なのですが、すでに存在しない(過去ログとして消えてしまった)親記事に対して、いきなり子記事を投稿してきました。
ブラウザを使って投稿する一般のユーザであれば、存在しない親記事にレスポンスをつけることはできません。
この掲示板書込みツールは、FORM 内容を1度だけ保持しておき、直接POSTしてくるタイプのようです。
UAには、google.com という文字列が入っていますが、GoogleさんのロボットはPOSTをしますか?
そもそもPOSTでのGoogleロボットの巡回は不要に思いますし、そんな迷惑な行為はしないと信じたいですね。
HTTP_USER_AGENT :
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
HTTP_REFERER : 無し
記事内容 : 英語の文章とURLなどの羅列
対策 : HTTP_REFERER が「空」である投稿を拒否。あるいは指定したHTTP_REFERER以外からの投稿を拒否。
[タイプ3:HTTP_REFERER偽装]
こちらも[タイプ2]と同様、過去の記事に対してレスポンスを付ける形で投稿してきました。
ただし、HTTP_REFERER を偽装して投稿してきています。
投稿者のIPアドレスで制限をかけても良いのですが、複数の串を使いまわして刺してきているようなので焦点が絞りきれません。
HTTP_USER_AGENT :
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
HTTP_REFERER :
投稿アドレスを偽装。http://hoge.com:80/bbs.cgi とわざわざポート番号を付けています。
記事内容 : 英語の文章とURLなどの羅列
対策1 : 投稿フォームを表示した時刻や、任意に生成した認証文字、あるいは、Googleのサイト登録などにあるような画像で作った文字などとのマッチングを行う。(HTML生成版のため不可)
対策2 : REFERERが偽装されているので、UAの中にgoogle.comやUser-Agentなど特定の文字があればPOSTを排除。
[タイプ4:フォーム取得と同時に投稿?]
こちらは、アクセスするごとに毎回フォームの(INPUTなどの)NAMEを取得して、投稿をしてくるものです。
(もしくは、あらかじめ調査したフォーム形式を保持してPOSTしているのかもしれません。
そうであれば[タイプ2]と同じです。)
HTTP_USER_AGENT :
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
HTTP_REFERER : 無し
記事内容 : 無意味な英文字の羅列
対策1 : HTTP_REFERER が「空」である投稿を拒否。あるいは指定したHTTP_REFERER以外からの投稿を拒否。
対策2 : 万が一、このタイプでREFERERを偽装してきた場合は、UAの中にgoogle.comやUser-Agentなど特定の文字があればPOSTを排除。
[タイプ5:改行などの文字を書き込んでくる]
UAが違うだけで、[タイプ4]と同じように、アクセスするごとに毎回フォームの(INPUTなどの)NAMEを取得して、投稿をしてくるものです。
HTTP_USER_AGENT :
Mozilla/5.0
HTTP_REFERER : 無し
記事内容 : 英語の文章とURLなどの羅列
対策 : HTTP_REFERER が「空」である投稿を拒否。あるいは指定したHTTP_REFERER以外からの投稿を拒否。
メモ : コメントの中に ' \n ' を埋め込んでくるので注意が必要。
環境変数が取得できないサーバの場合
環境変数が取得(利用)できないサーバの場合はどうしたらよいのでしょう。
cookieは役に立たないと思ったほうが良いですし・・・。
こういった場合はあきらめる他ないのでしょうか・・・。
ということで
[タイプ2]〜[タイプ5]は同じスクリプトなのかもしれません。
現状では、
HTTP_REFERERのマッチングだけで対処できそうな気がしますが、
ソレを偽装してきた場合はなんらかの
認証キーを持たせる必要がありそうです。
ただ、画像(の文字)とマッチングしても、ソレを突破するDukeがあるそうで、
あまり複雑な処理をしたところで、結局は無意味になりそうです。
私のサイトで使用している掲示板システムに、これらの対策を施してから様子をみます。
以前に、自動投稿を抑制する方法として「どうしても投稿したい人は登録して頂いて認証する」などの方法を考えましたが、
補助的な役割でしかないことに気がつきました(今回の掲示板にはオプションとして搭載しても良いかと思っています:検討中)。
いずれにしても複雑な処理をする気はありません。
さらに新手が現れた場合はここに記載することにします。
2006.07.08
[タイプ6:マクロちっくなロボット]
ログを取って調べてみましたら、ブラウザと同じ動作を行うロボットを見つけました。
まず掲示板CGIを表示(GET)してフォーム部品を取得。その後、掲示板の仕様に合わせてPOSTを繰り返すロボットです。
ところがこのロボットには問題があります。毎回、IP(もしくは串)を変更して連続POSTしています。
ということであれば、GETの段階でIPを記録しておき、同じIPでのPOSTのみに許可するというオプションでもよいのかもしれません。
もし同じIPで連続投稿してくるのであれば[タイプ1]の対策でOKではないかと思います。
HTTP_USER_AGENT :
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
HTTP_REFERER : 完全な偽装(あるいは純粋なREFERER)
記事内容 : 英語の文章とURLなどの羅列
対策1 : GET時のIPとPOST時のIPを比較して同じでなければ拒否。(HTML生成版のため不可)
対策2 : 指定したアドレス以外からのリンク(GET)を拒否。(HTML生成版のため不可)
対策3 : 英文字だけの場合は投稿を拒否。
2006.07.13
掲示板の荒氏対策に関わるサイト
掲示板の荒らし対策を取り扱うサイト様を参考にさせて頂きます。
各サイトさまには有益な情報をご提供くださいまして感謝申し上げます。
以下、参考にさせて頂いたサイトをご紹介します。
BBQ あらしお断りシステム
「公開PROXYからの投稿規制」を利用させて頂きます。
2006.07.21
UNIX系\n送信の判定
まとまりが無い書き方ですみません。
[タイプ5]でフォーム情報(NAME)などを取得して投稿するタイプのロボットにおいて、
<textarea>の場合に改行コードとして「\n」を単発送信してくるものがあります。
対策 : <textarea>に「\n」が単発で入っていたら投稿を拒否。
メモ : UNIX系ブラウザからの投稿の場合に不具合が出るかもなので注意が必要。
2007.09.01