宮下ヒロシ対策1 JUYFUL NOTE編
何度も書くが、例の宮下ヒロシに代表される、CGI掲示板 Joyful Note を狙った書き込みスパム(ここではこれ以降、発信元を「ヒロシ」と呼ぶ。こいつじゃない書き込みもあるだろうが、こっちにはそんなこと関係ない)。
さすがにあれだけやられると私も根に持つのだよ。
本日も同じようなロボット書き込み(日替わりエッチな直リンク紹介してますぅ〜♪)が行われた模様。
↓これはほんの一例。
http://www.chat-jp.com/shared/samples/joyful/joyful.cgi
http://www.projectk.co.jp/cgi-bin/bbs/buy/joyful.cgi
http://www.kamogawa-syuzou.jp/joyful/joyful.cgi
http://presen-cg.kir.jp/web-ex/bbs2/joyful.cgi
http://www.takisho.or.jp/cgi-bin/joyful/joyful.cgi
http://www.ryojinla.com/cgibin/PhotoBoard/joyful.cgi
今回の書き込み攻撃はどうやら12/27の16:03〜16:05の前後に行われたらしい。
で、ウチの現行掲示板と、実験用に残している掲示板を確認してみよう。
現行掲示板
http://taizo3.net/hietaro/cgi-bin/joyful.cgi
実験用に残している旧掲示板
http://popup11.tok2.com/home2/hietaro/cgi-bin/bbs.cgi
どうやらどちらも被害は免れたようで。
実はこの2つの掲示板は別々の対策をしてる。
恐らく両方とも効果があったんだろうということで、共有財産として公開しておきます(って、そんな大したことじゃない。(^^;
対策その1:
「同一IPアドレスからの連続投稿時間(秒数)」を長く取る。
まずは一番簡単なこと。
先日の「約25分間で4050件」ってのも、結局ロボットが動いたのはこの時間だけだったようだし、だとすると例えば連続投稿禁止時間が10分なら3件、5分なら6件で済んだわけだ。
しかしこのやり方はマトモな投稿者の不便にもつながりかねないし、結局1回以上は書き込みされちゃうわけだから、根本的な解決にはならない。
※164行目(JOYFUL NOTE v1.7 (2003/10/23)の場合)を変更する。
| 161:# 同一IPアドレスからの連続投稿時間(秒数) 162:# → 連続投稿などの荒らし対策 163:# → 値を 0 にするとこの機能は無効になります 164:$wait = 120; |
対策その2:
cgiファイル名を変える。
JOYFUL NOTEの本体はデフォルトで「joyful.cgi」となっており、このまま使っている人が大半だと思う。
ヒロシはこの名前を持つファイルに対して書き込みデータを送りつけているようだ。
今回も、「bbs.cgi」と名前を変えた旧掲示板への書き込みはなかった。
しかしこの場合アドレス変更が伴うのでリンクも変更しなければならず、新規設置の場合はいいとして、既に稼働している掲示板での採用はめんどくさいかも。
※ファイル名を変更した後、129行目(JOYFUL NOTE v1.7 (2003/10/23)の場合)も変更の必要アリ。
| 127:# スクリプトのファイル名 128:# → フルパスで指定する場合は http:// から記述 129:$script = './ |
「○○○○.cgi」は、もちろん実際に変更したファイル名を入れる。
対策その3:
フォームから送られる変数を増やす
このブログのコメントスパム対策でも効果を上げているやり方。
ヒロシはネット上にあるjoyful.cgiに片っ端から直接アクセスして変数を渡しているようだから、投稿に必要な変数を増やして、その変数がない投稿(つまり投稿フォームを経由しない投稿)は拒否しちゃいましょう、というもの。
変更点は以下の通り。変数名は具体的に書いて対策されちゃうとイヤなので、あえて伏せ字で。みなさん適当に考えて。
これならファイル名を変更する必要はないので、かなり汎用的に役に立つのではないかと。
※1373行目あたりと2056行目あたり(JOYFUL NOTE v1.7 (2003/10/23)の場合)に挿入の必要アリ。
| 1372: if ($in{'name'} eq "") { &error("名前が入力されていません"); } 1373: if ($in{'comment'} eq "") { &error("コメントが入力されていません"); } 1374: if ($in_email) { ↓ 1372: if ($in{'name'} eq "") { &error("名前が入力されていません"); } 1373: if ($in{'comment'} eq "") { &error("コメントが入力されていません"); } 1374: if ($in{'▲▼■●'} eq "") { &error("フォームからの投稿ではありません"); } 1375: if ($in_email) { |
|
2052:<tr> 2053: <td nowrap><b>URL</b></td> 2054: <td><input type=text size=62 name=url value="http://$curl"></td> 2055:</tr> 2056:EOM ↓ 2052:<tr> 2053: <td nowrap><b>URL</b></td> 2054: <td><input type=text size=62 name=url value="http://$curl"></td> 2055:</tr> 2056:<tr> 2057: <td nowrap></td> 2058: <td><input type="hidden" name="▲▼■●" value="★★★"></td> 2059:</tr> 2060:EOM |
▲▼■●(変数名)は2箇所とも同じものにする。
★★★(変数の値)は何を入れてもいい。チェックしてるのは変数の中身があるかどうかだけなので。
対策その4:
ヒロシに謝って許してもらう
うめっちのコメントが面白かったので、採用。(^O^)
寝ます。
突然食いたくなったものリスト:
- メロン味のホワイトチョコレート
本日のBGM:
Hard Luck Woman /KISS
トラックバック(0)
このブログ記事を参照しているブログ一覧: 宮下ヒロシ対策1 JUYFUL NOTE編
このブログ記事に対するトラックバックURL: http://taizo3.net/cgi-bin/mt/mt-tb.cgi/4853

こんなところがあったのね。
対策:ヒロシに謝って許してもらう。www
変数増やしは、俺のちょっとバージョンが古いやつでもOKなんですかね?
あとこれは、本当に指摘部分を追加するのみ?すげー簡単じゃん!
うめっちの対策、採用しました。\(^O^)/
指摘部分2箇所の追加だけで大丈夫のハズっす。
下の箇所の変更で、入力フォームに新たな変数を渡す部分を作り、上の変更で、その変数が存在するかどうかをチェックしてます。
本文に書いてるとおり、どうせhidden属性なので別にで囲んで行にする必要はないんですが、まあソースの中でそれだけはみ出してるのも気持ち悪いので。(^^;
↑別に<tr>で囲んで……
バージョンを書いたのは変更行が違うかもしれないからってだけで、相当部分を変更するならもちろん旧バージョンでも大丈夫だろうと思います。