私が管理するふたつのサイト、写真のサイト(ここ)と音楽のサイトそれぞれに掲示板を設置していますが、2005年後半になって音楽の方の掲示板に主に海外からと思われる宣伝投稿、迷惑投稿が増えまして、その対策として掲示板の改造をしました。今回はその過程で感じた事などを書いてみようと思います。
ただ最初にお断りしておきますが、私はCGIには疎く、詳しい事は分りません。むしろ何も分らなかったので「こりゃCGIの基本ぐらい勉強しないと対策するにも埒が明かない」と思い、Perl/CGIの入門書を買ってきた程です。だから専門的な事よりも、CGIの分らない人の立場に立って、なるべく少ない手間で効果的と思われる対策について私見を述べてみます。
更に結論めいたことを先に書いてしまえば、もしあなたの掲示板がKent
WebさんのJoyful Note, JOYFULYY, YY-Board, Web Forum, Web Patio, ASKA
BBS, Light Board, e-Pad, PetitBoard, G-Light, SUN BOARD, Honey Board, Fantasy
Board, Clip Boardのいずれかならば、このつぶやきなど読む必要は無く、issoさんの掲示板改造支援サイトに直行してください。そこには超強力な対策が折り込まれたKent
WebさんのCGIの改造バージョンが無料配布されており、そちらにアップデートされれば迷惑投稿に関する99%の悩みは解決すると思います。純粋な機能追加バージョンなので、今までのデータや過去ログがそのまま使えますし、インターフェースも変わりません。実は私の音楽サイトの掲示板はLight
Boardであり、私なりの簡単な掲示板改造を終えた頃にissoさんのサイトを発見しまして、その高度な機能に感銘し、CGIを全面入れ換えして問題は解決しています。写真のサイト(ここ)の掲示板はSUN
BOARDですが、私が対策を考えた時にはまだ改造CGIが公開されていなかった為、issoさんの改造コンセプトを参考に自力で改造しました。 (その直後にissoさんからSUN
BOARDの改造CGIが公開されました。)
前置きが長くなりましたが、ここからが本題です。
1 このつぶやきが扱う掲示板の種類について
掲示板を大きく分けると3つに分類出来ると思います。
(1)無料(有料)レンタル掲示板
契約しているインターネットプロバイダーが用意する掲示板や、teacupの様なレンタル掲示板で、CGIの知識も自前のサーバースペースも必要としないものです。この掲示板の場合は自分でCGIの改造変更は出来ませんので、対策は全て掲示板の運営者側にゆだねられています。先方も一種の商売ですから、迷惑投稿対策は年々進化していますが、当然機能には限界があり、ユーザー側はその範囲内で我慢しなければなりません。今回のつぶやきでもこの掲示板のユーザーの方には有益な事は書けないと思います。
(2)自分専用のサーバースペースに、無料(有料)CGIを設置した掲示板
私も使っているKent WebさんのCGI等を利用した掲示板です。CGIの知識は基本的に不要ですが、設置にはCGI/Perlが使えるサーバースペースが必要であり、パーミッション設定などFTPに多少の知識が必要です。場合によってはCGIの改造も可能なので、このつぶやきでお話する事がお役に立つかも知れません。
(3)自分専用のサーバースペースに、自前のCGIを設置した掲示板
自分で一からCGIを作れる人にこのつぶやきは釈迦に説法(^^;。迷惑投稿対策も万全だと思います。
という事で、主に(2)に該当する掲示板を管理されている方で、CGIに疎い人むけの話題を書きます。
2 迷惑投稿の種類と性質
長年の間、迷惑投稿があれば削除するだけ、あるいは削除した上で該当ホストのアクセス制限を加えるぐらいの対応をしてきましたが、それだけでは事態は年々酷くなるばかりでした。それで迷惑投稿の記録を残し、アクセスログを解析する所から私の対策ストーリーは始まりました。その結果として私なりの大まかな分類は以下のようになります。なお、文中のオレンジ部分はCGIを自分で変更出来る人に有効なコメントなので、CGIに疎い方は参考として読んで下さい。
(1)大量のURLを書き込む宣伝投稿(基本的に文面無し)
量的にはこの迷惑投稿が一番多く、現在音楽サイトの掲示板にはこの迷惑投稿ばかり一日100件近い書き込みがあります。
この投稿の厄介な所は、量が非常に多く、消しても消しても直ぐに来る事(酷い時は3分間隔)、IPアドレス/ホストが毎回ごっそり変わり、アドレスの出所を調べると日本を含む全世界に渡っている事です(恐らくプロキシを使ってなりすましているのだと思います)。従って一般的なIPアドレス/ホストでのアクセス規制はこの種類に対しては殆ど無力です。
一方の弱点は、自動投稿プログラムによるものであること(掲示板にアクセスせずいきなり投稿する)、内容がワンパターンであることから、掲示板への事前アクセス有無や投稿内容で規制出来れば、投稿パターンが変わるまで100%カット出来ます。
大量URL書き込みタイプのアクセスログ例。事前のアクセスが全く無く、突然に投稿してくるのが特徴。実ははこのログが記録されている時点では掲示板を一旦削除してあり、全部404(not
found)エラーになっています。掲示板が無くても投稿してくるのが自動投稿ソフトの証拠。またIPアドレス(赤字)を縦横無尽に変えてくるのが特徴で、従ってIPアドレスでの規制には効果がありません。夜中の二時間だけで10件の投稿がありました。
68.39.203.88 - - [30/Dec/2005:00:01:19
+0900] "POST /****/light.cgi HTTP/1.0" 404 339 "-" "Mozilla/5.0 (Windows;
U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"
147.110.61.39 - - [30/Dec/2005:00:03:49
+0900] "POST /****/light.cgi HTTP/1.1" 404 351 "-" "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1)"
211.90.167.10 - - [30/Dec/2005:00:41:31
+0900] "POST /****/light.cgi HTTP/1.0" 404 339 "-" "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1)"
221.10.55.226 - - [30/Dec/2005:00:51:20
+0900] "POST /****/light.cgi HTTP/1.0" 404 339 "-" "Mozilla/5.0 (Windows;
U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"
217.207.174.220 - - [30/Dec/2005:01:01:19
+0900] "POST /****/light.cgi HTTP/1.1" 404 351 "-" "Mozilla/5.0 (Windows;
U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"
211.76.253.10 - - [30/Dec/2005:01:20:16
+0900] "POST /****/light.cgi HTTP/1.0" 404 339 "-" "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1)"
218.108.238.76 - - [30/Dec/2005:01:27:11
+0900] "POST /****/light.cgi HTTP/1.1" 404 351 "-" "Mozilla/5.0 (Windows;
U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"
24.242.158.133 - - [30/Dec/2005:01:53:08
+0900] "POST /****/light.cgi HTTP/1.1" 404 351 "-" "Mozilla/5.0 (Windows;
U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"
202.58.85.2 - - [30/Dec/2005:02:01:24
+0900] "POST /****/light.cgi HTTP/1.1" 404 351 "-" "Mozilla/5.0 (Windows;
U; Windows NT 5.1; en-US; rv:1.7.12) Gecko/20050915 Firefox/1.0.7"
70.174.75.79 - - [30/Dec/2005:02:27:13
+0900] "POST /****/light.cgi HTTP/1.0" 404 339 "-" "-"
実際の投稿例。本文が大量のURLのみで構成されるもの。2005年末時点の特徴は、メールアドレスがinfo@info.info固定、題名と名前が同じ、本文中の大量のURL等。これらに着目すればIPアドレスで規制しなくても100%カット出来ます。
タイトル: paxil
投稿者: paxil メール: info@info.info 投稿日: 2005/12/31(Sat) 12:27
http://about....
http://about....
---(中略)---
http://about....
http://about....
http://about....
<219.144.196.226>
|
(2)アダルト系/出会い系の宣伝投稿(基本的に日本語)
量的にはさほど多くありませんが、酷い時は毎日のように来襲しました。この投稿の厄介なところは、書き込み内容を毎回大きく変えてくる(あるいは色々な種類がある)ので、書き込み内容での規制ではどうしてもモレが出る所です。対策で目をつけるべき点は、やはり自動投稿プログラムによる投稿が多い(掲示板に事前アクセス無しで投稿するか、あるいは掲示板アクセス時間と投稿時間がほぼ同時である)事と、結局は宣伝なので特定のホスト名を持つサイト/メールアドレスが書き込まれている事です。またIPアドレス/ホストは変化させて来ますが、そのバリエーションはさほど多くなく、10ぐらいのホストアクセス規制をすればかなりの確率でカット出来ます。
自動投稿プログラムによるアクセスログの例。最初の掲示板アクセス(GET)と投稿(POST)がほぼ同時。人間業では出来ないですね。
p1215-ipbf29osakakita.osaka.ocn.ne.jp - - [03/Nov/2005:20:52:20
+0900] "GET /****/sunbbs.cgi?mode=form
HTTP/1.1" 200 58776 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT
5.1; SV1)"
p1215-ipbf29osakakita.osaka.ocn.ne.jp - - [03/Nov/2005:20:52:21
+0900] "POST /****/sunbbs.cgi HTTP/1.1"
302 364 "http://*******/****/sunbbs.cgi?mode=form" "Mozilla/4.0 (compatible;
MSIE 6.0; Windows NT 5.1; SV1)"
ちなみに*osakakita.osaka.ocn.ne.jpを含めて下記はアダルト系/出会い系の投稿の多いホストですから、アクセス制限しておくと日本語スパム投稿の80%は防げますよ。(2006.8.13
ホスト追加)
*osakakita.osaka.ocn.ne.jp
*marunouchi.tokyo.ocn.ne.jp
*.d-osaka.nttpc.ne.jp
*.o-tokyo.nttpc.ne.jp
*.osk.mesh.ad.jp
*.dy.bbexcite.jp
*.vectant.ne.jp
*.ap.highway.ne.jp
*.fbb.reset.jp
*.ppp11.odn.ad.jp
*.channel4.com
*.ap.gmo-access.jp
*.ap.kagoya.net
*.ap.yournet.ne.jp
*.ap.cyberbb.ne.jp
*.i-revonet.jp
*.rev.home.ne.jp
※もし上記ホストに該当するプロバイダーと契約されている人が居られたら、数多くのサイトや掲示板でアクセス規制されていると思います。プロバイダーを変更された方が楽しいネット生活を過ごせると思います。 |
(3)その他
アダルト系/出合い系投稿でも、掲示板にアクセスして手動で投稿しているものもあります。こちらはIPアドレス/ホストでのアクセス規制である程度防げると思います。投稿内容での規制もある程度役に立つでしょう。ただ手入力の場合は普通の人の行動と一緒なので、決定打は無い気がします。削除して無視を決め込むのがイチバンかも知れません。
以上が大まかな分類ですが、私が一番着目したのは迷惑投稿に占める自動投稿プログラムによる投稿の多さでした。
3 自動投稿プログラムに狙われ難くするには
インターネット上の掲示板には様々な種類がありますが、自動投稿プログラムがその全てに対応出来るとは思えません。結果的にこのプログラムに狙われるのは、世の中に広く共通に普及しているCGIを使った掲示板でしょう。teacupなどのレンタル掲示板と、ユーザー数の圧倒的に多いKent
Webさんで配布しているCGIが狙われる確率が高いと思われます。例えば私の掲示板の内でより大きな被害を被ったLight
BoardはKent Webさんの掲示板リストの一番上に掲載されている標準的な掲示板です。一方の被害が未ださほど大きくないこのサイトの掲示板はリストの4番目、ノーマルカテゴリーの一番下にある掲示板です。従って音楽サイトの掲示板の方が狙われやすかったと言えるでしょう。その狙いやすい掲示板のアドレスを収集する人やロボットがインターネットを徘徊していると思われます。
(1)CGIのファイル名を変える
例えばgoogleあたりで「light.cgi」というキーワードで検索を掛けると10万件以上の掲示板が引っ掛かります。Kent
Webさんで配布しているCGIのファイル名ならどれも似たような結果になります。これって迷惑投稿する側にとっては極めて便利な情報ですよね。10万件以上の、投稿フォーム部分が共通の掲示板のアドレスを簡単に集める事が出来る。あとはこれらのアドレスを自動投稿プログラムに入力し、公開されている投稿フォームも入力すれば仕事完了です。
従って広く公開されているCGIを使われる場合は、ファイル名を変えるだけで検索に引っ掛かる確率を大幅に下げる事が出来るでしょう。やり方は簡単です。例はLight
BoardのCGIスクリプトで示しますが、Kent Webさんで公開されているCGIであればどれも似たようなものです。
CGIの初期設定エリアのどこかに、掲示板にアクセスした際に呼びだすCGIスクリプト(ファイル名が掲示板名と近似し、拡張子が.cgi)が置かれている場所を記述する箇所があります。
#-------------------------------------------------
# ▼設定項目
#-------------------------------------------------
# スクリプトURL
$script = './light.cgi';
(KEN注釈:スクリプトに拠ってはhttpから始まるURLで記載するケースもあります)
($script = 'http://www.xxx.xxxx/bbs/sunbbs.cgi';
とか)
# 管理ファイルURL
$admin = './admin.cgi';
# ログファイル
$logfile = './data.cgi';
----(中略)----
#-------------------------------------------------
# ▲設定完了
#-------------------------------------------------
(注釈:上記スクリプトの著作権はKent Webさんにあります)
この赤字部分を好きな名前(半角英数字小文字).cgiに変えます。そしてファイル名そのものも同じ名前に変えればOKです。
更にKent WebさんのCGIを使う場合の対策をひとつ。Kent
Webさんの掲示板では著作権表示として掲示板の最後に小さく「掲示板名」とKent
Webさんへのリンクが表示されます。CGI利用規定上この表示を消す事は許されませんが、Kent
Webさんはリンク名を「KENT」に変える事は許容されています。従って掲示板末尾の表示をデフォルトの「Light
Board」の様な掲示板名から「KENT」に変えると更にリスクを下げる事が出来ると思います。実際googleで末尾に表示されている掲示板名「Light
Board」や「Joyful Note」等で検索しても10万件以上の掲示板が引っ掛かりますので。
(2)投稿モード名を変える
この対策は少しCGI/Perlの知識が必要になりますが難しいものではないのでご紹介します。掲示板から投稿すると、インターネット上を一列の文字列が掲示板CGIに送付されます。それは分かりやすく大ざっぱに記せば次のようなものです。【....】は私の注釈です。
【送付先】action=http://xxxx.xxx/light.cgi?【投稿処理サブルーチンを呼びだすモード】&mode=regist【投稿内容】&name=(名前)&sub=(タイトル)&comment=(本文)&email=(メールアドレス)&url=(参照URL)&pass=(記事編集パスワード)....
この文字列を受け取ったCGIは最初にmode=xxxxxの文字を読み取り、投稿を処理するサブルーチンを起動します。この文字を変更すれば掲示板にアクセスせずに投稿してきたメッセージはサブルーチンを呼びだす事が出来なくなり、結果的にはじく事が出来ます。多くの掲示板CGIのデフォルトのモード名は「reg」か「regist」だと思いますので、これを適当な物(例えばphotoの様に投稿とは連想出来ないもの)に変えてしまいましょう。この変更の良いところは、掲示板にアクセスするURLには変化が起きないので、お客様に引っ越しの案内やブックマーク変更のお願いをしなくて済む事です。万一新しいモード名に対処した迷惑投稿があっても、また違う名前に変えれば迅速に対処出来ます。変更ヶ所は以下のところです。
まず投稿フォームのCGIを探しだします。掲示板の投稿フォームに現れる「おなまえ」「Eメール」「タイトル」「コメント」などの言葉を頼りに探すと直ぐに見つかります。そこを注意深く見ると、
# 投稿フォーム
print <<"EOM";
<hr width="90%"></div>
<form method="POST" action="$script">
<input type=hidden name=mode
value="regist">
<blockquote>
<table cellpadding=1 cellspacing=1>
<tr>
<td><b>おなまえ</b></td>
<td><input type=text name=name
size=28 value="$cnam"></td>
</tr>
----(以下略)-----
(注釈:上記スクリプトの著作権はKent Webさんにあります)
name=mode
value="xxxxxxx" という文字列が1ヶ所だけあります。このxxxxxxx (上記例ではregist)を好きな文字列(半角英字小文字)に置き換えます。例として
<input type=hidden name=mode value="photo">
としておきましょう。
次にCGIの先頭付近を探すとモード($mode)によってサブルーチン(&文字列、で記載される)を選ぶIf文/elsif文が集まった箇所があります。
if ($mode eq "regist")
{ ®ist; }
elsif ($mode eq "howto") { &howto; }
elsif ($mode eq "find") { &find; }
elsif ($mode eq "dellog") { &dellog; }
elsif ($mode eq "editlog") { &editlog;
}
elsif ($mode eq "past" && $pastkey)
{ &pastlog; }
elsif ($mode eq "check") { ✓ }
(注釈:上記スクリプトの著作権はKent Webさんにあります)
このクォーテーションで囲まれた部分から投稿フォームで使われていたモード名と同じ文字列を探しだし(上記例では"regist")、これを先程と同じ文字列(半角英字小文字)に変更します。上記例に沿った変更方法は if
($mode eq "photo")
{ ®ist; } となります。なおサブルーチンの名前(上記例では®ist)は変更してはいけません。こちらを変更すると動かなくなります。
以上ふたつの変更により、あなたの掲示板は迷惑投稿する人達の掲示板探査の目から雲隠れし、万一見つかったとしても、自動投稿ソフトが入り込みにくい鎧を着た事になります。
なお、CGIスクリプトを書き換える時の鉄則ですが、必ずオリジナルを残しコピーで作業して下さい。書き換え後に万一エラーになったとした際に元に戻せなくなります。またエラーになったら、クォーテーション、ピリオド、セミコロンなどを誤って消したり重複させたりしていないか疑って下さい。
$script = './light.cgi';
を
$script = './light.cgi; (cgiのあとのシングルクォーテーションを削除)
$script = './light.cgi' (最後のセミコロンを削除)
$script = './light.cgi''; (cgiの後のシングルクォーテーションを重複)
とするだけでCGIは動かなくなります。
これ以外にも迷惑投稿を防ぐノウハウは沢山ありますので、もし興味があればissoさんのサイトの「掲示板スパム対策」を読んでみて下さい。特に「掲示板へのリンクを工夫する」は必読、実行すべき工夫だと思います。私ももちろん採用しています。
また、私はブログを設置していないので詳しくは分りませんが、ブログへの迷惑投稿対策にも相通じる所があるのではないかと想像します。
2006年5月4日追記
その後、非常に大量のスパム投稿を分析したところ、掲示板へのアクセス、投稿方法などの特徴で幾つかの種類がある事が分りました。各々のパターンで対策の効果が異なりますので、追記しておきます。
まず全てのスパム投稿に共通する事は、掲示板の在り処を知るために、googleやYahooなどの検索エンジンから検索するか、自前の検索ロボットでネット上を徘徊している事です。いずれにしても元は検索ロボットであり、この目から掲示板をガードすれば効果が望めます。逆に言えば掲示板そのものはYahoo等の検索エンジンに登録される事を諦めなければなりません (それで困る人は多くないとは思いますが)。
次に全てのスパムに共通する事は、一度は必ず掲示板にアクセスして、投稿フォームを読んでいる事です。但しその後のスパム側の投稿が異なります。
タイプ1 一度アクセスした掲示板は、二度とアクセスせずに、同じ投稿フォーム情報で何度も繰り返し投稿する。海外からの大量URL投稿、コメント投稿はこれが多い。
タイプ2 一度アクセスした掲示板は、数回は同じ投稿フォーム情報で投稿を繰り返すが、一定間隔でまたアクセスして投稿フォーム情報を更新してゆく。
タイプ3 毎回掲示板にアクセスして、投稿フォーム情報を読み、投稿する。
これら全ての作業が、人手を経ずにロボットか自動ソフトで行われており、殆どのケースでJavaScriptを解釈していないという共通点があります。少なくとも私のところに来たスパム投稿でJavaScriptを解釈した物はありませんでした。
これ以外にもスパム投稿分析で得た排除アルゴリズムは沢山ありますが、説明は控えます。issoさんの最新版CGIに組み込まれていますので「issoさんのCGIを使う」という方法に置き換えさせて戴きます。
そこで対策の効果ですが
- |
CGIのファイル名を変える *1 |
掲示板へのリンクをJavaScriptにする *2 |
投稿モード名を変える |
issoさんのCGIを使う |
検索ロボットから掲示板をガードする |
○ |
◎ |
- |
- *3 |
タイプ1のスパム投稿を排除する |
◎ |
◎ |
◎ |
◎ |
タイプ2/3のスパム投稿を排除する |
○ |
◎ |
△ |
◎ |
◎:ほぼ完全な効果が見込める。 ○:高い効果が見込める。 △:効果が中途半端。 -:この項目には関連しない。
*1:CGI名は掲示板を連想させないもの、bbs, board,
forum, blogなどの言葉を含まないものにしないと効果が半減です。
*2:掲示板への全てのリンクをJavaScriptにしなければ効果ありません。掲示板への直リンクを禁止する事も大切です。また既存の場所へのリンクをJavaScriptにしても効果ありません。新しい場所に掲示板を移転し、そこへのリンクをJavaScriptにする必要があります。更にこの場合、携帯からリンクをたどれなくなりますので、携帯ユーザーは掲示板のURLを手入力等で入れてブックマークする必要があります。
*3:issoさんのCGIの最新バージョンには、オプションで検索ロボットと同じIPからのアクセスを排除する機能が用意されています。設定にはHTMLに対する多少の知識が必要ですが、これを用いると効果が望めます。
結論を言えば、
-
掲示板を新しいディレクトリに移転し、そこへのリンクを全てJavaScriptで記述する
(issoさんのサイトの「掲示板スパム対策」の中に解説があります)。
-
掲示板CGI名を本来の掲示板とは無関係な名前に変更する
(方法は上記)。
-
可能ならissoさんのCGIを使う(実はこれが一番肝要だったりして)。
これでほぼ完ぺきにスパム投稿をシャットアウトできる筈です。 |
4 (参考)IPアドレス/ホストの登録国について
掲示板のログには投稿者のリモートホスト(p1215-ipbf29osakakita.osaka.ocn.ne.jpの様なもの)又はIPアドレス(219.142.196.226の様な数字列)が残されます。これらのアドレスが登録されている国を調べる事が出来ます。ホスト名の最後が.jpであれば日本ですが、.com、.net等が米国とは限りませんし、スパムの多い中国、韓国は意図的にかホスト登録を殆どしていませんので、カントリーコードの無いIPアドレスでログが残されてしまいます。
調べられるサイトは、googleやYahooで「whois
IPアドレス」で検索を掛けると沢山出てきます。それらサイトでwhois検索をすれば、入力したホスト名/IPアドレスの登録国、登録業者名と、検索IPアドレスが含まれる登録IPアドレスの範囲が分ります。例えば例に出した219.142.196.226の検索結果の核心部分は、
inetnum:
219.141.128.0 - 219.143.255.255
netname: CHINATELECOM-BJ
country: CN
descr:
CHINANET beijing province network
descr:
China Telecom
となり、中国のIPアドレスで、このIPアドレスは 219.141.128.0
- 219.143.255.255 の登録範囲に含まれる事が分ります。IPアドレスは接続の度に変動しますので、もし219.142.196.226からのの書き込みを規制したければ
219.141.128.0 - 219.143.255.255全体を規制しなければ意味がありません。
実際にはもっと広範囲のIPアドレスを使ってスパム投稿が行われるので、もし中国や韓国からの書き込みで困って居られるなら、中国/韓国で使われているIPを全部記載したサイトもありますので、参考にして下さい。
|