BBSのSPAM対策

| コメント(7)

ここ1ヶ月ほど「にが up BBS」へエロサイトの広告SPAMが毎日1件程度投稿されていた。エロ画像を添付してくるものもあったので、画像を認証しないと表示できないようにしたり、一時的に親スレを管理者のみの投稿にしてみたりしたが、一向に止む気配がない。

NGワードを設定して同じ投稿は二度と出来ないようにも対策はしていたが、NGワードに半角スペースを入れてきたり、似た文字に入れ替えたり、URLをキャラクターコード表記で書いてきたりと、敵も巧妙に網をすり抜けてくる。

たとえば「エロが」NGだとすると「エ□」に換えたり、URL項目で「niga」がNGワードなら「%6eiga」換えたり。URLはキャラクターコード表記でも半角文字と同じ扱いになるから、閲覧者がクリックすればまんまと敵のエロサイトに飛ばされてしまう。

これがロボットSPAMの仕業だとすると、キチンとエラーメッセージを読解してエラーを回避するプログラムが組み込まれているということになる。なかなかインテリジェントなやつだ。

投稿の頻度もなかなか考えられている。1日に大量に書き込まれるようなことになれば、管理人がBBSが閉鎖したり、他のcgiに変更したりという対策を取るであろうが、1日1回であれば、面倒くさくても削除の追いつく程度であり、積極的なSPAM対策をしない管理人も少なくないだろう。

ウチではしばらくの間いちいち削除&NGワード設定をしていたのだが、いい加減面倒くさくなってきたので本腰を入れることにした。まずUPP-BOARDがバージョンアップしていないか調べてみたが、残念ながらこのcgiは2002年以降更新されていない。SPAM対策のしっかりした他のcgiに乗り換えることも考えたが、過去ログをどうするかという問題もあるし、UPP-BOARDの使い勝手は気に入っているのでなるべく変えたくない。そこでUPP-BOARDのcgiを改造してCAPTCHA認証機能を付けることにした。投稿者には若干の面倒を強いることになるがエロSPAMを放置しておくわけにもいかないので致し方ないだろう。

CAPTCHA認証については、ここのサイトのプログラムを利用させていただいた。下に書いたようにUPP-BOARDのcgiに合わせてカスタマイズが必要。導入後数日経過を見ているが、広告SPAMはピタリと止んでいる。人力SPAMであれば突破してくるはずなので、やはりロボットSPAMの仕業だったようだ。

以下覚え書き。ウチと同じようにUPP-BOARDを使っているWEBマスターがいれば参考になると思う。

1.ダウンロードしたconkey.*の内容をBBSと同じ場所コピーして属性変更

image_gen.cgiとkeyinit.plは属性755として実行可能にする。
bg_gen.cgiは背景画像"bg.gif"を作製する時だけ使用するので、デフォルトのbg.gifでよい場合はコピー不要。

2.keyinit.plの編集

1)暗号化キーはデフォルトのままだと突破される恐れがあるので任意に書き換え

$crypt_key = 'xxxxxxxx';

2)フォントのパスはサーバーに合わせて変更(ウチの「vine Linux」では下記)

$font = '/usr/X11R6/lib/X11/fonts/TTF/luxirb.ttf';

3)確認キーチェックのサブルーチンの「&error」文字列をupb.cgiの仕様に合わせて「&er_」に書き換える
  尚、私はデフォルトで設定されている「キーワード」をBBS上で表記されている「確認キー」に変更した

sub key_chk {
#(確認キー,暗号キー)
    my($chk, $key) = @_;
    my($plaintext,$old_time);
    if (!$chk){&er_("確認キーを入力してください");}
    # エンコード
    ($plaintext,$old_time) = &de_key($key);

    # キー一致
    if ($chk eq $plaintext) {
        # 制限時間オーバー
        if(time - $old_time >$ef_time*60){&er_("制限時間をオーバしています"); }
        # 制限時間OK
        else{ return 1; }
    # キー不一致
    }else{&er_("確認キーが誤っています"); }

4)確認キーの文字数、背景イメージ、フォント色、 フォントサイズのカスタマイズ

$len = '4';
$bgfile = 'bg.gif';
$font_color = '#e0e0e0';
$font_size = '18';

3.upb.cgiの編集

1)冒頭に require './keyinit.pl'; を挿入。

require './jcode.pl';
require './keyinit.pl';

2)スレコメントの削除キー入力の下に以下挿入。

/削除キー/<input type=password name="delkey" size=4 value="$c_key"$ff><br>
</td></tr>
<tr><td align=right>確認キー/<img src="./image_gen.cgi?$ciphertext" alt="確認キー">
<input type=text name="chk" size=8 value="" maxlength=8></td></tr>
<input type=hidden name=ciphertext value="$ciphertext">

<tr><td align=right>
<input type=submit value=" レス "$fm>
<input type=reset value="リセット"$fm>

3)ログ書き込みサブルーチンの冒頭に下記挿入

sub wri_ {
&key_chk($chk,$ciphertext);

4)フォームなどのデコードの項目に下記追加。

$mo =$FORM{"mo"};
$hr =$FORM{"hr"};
$chk =$FORM{"chk"};
$ciphertext=$FORM{"ciphertext"};

5)フォームサブルーチンの冒頭に下記追加。

sub form {
$ciphertext = &en_key;

6)フォームの「送信する」ボタンの直前に下記挿入。

print <<"_KEY_";
</td></tr>
<tr><td bgcolor=$ttb>確認キー</td><td colspan=3>/<font color="red">右の$len文字($charset[$chr])を入力してください。</font> (キーは<font color="red">$ef_time分有効</font>)
<img src="./image_gen.cgi?$ciphertext" alt="確認キー">
<input type=text name="chk" size=8 value="" maxlength=8></td></tr>
<input type=hidden name=ciphertext value="$ciphertext">

<tr><td align=right colspan=4><input type=submit value="送信する"$fm>

コメント(7)

ここの内容、モロパクられてた。パクラレ具合が激しすぎて笑える。ttp://ameblo.jp/suimin22/entry-10544199641.html
いつも楽しく拝見させていただいています。
掲示板がIE以外では全て閲覧すらはじかれてしまうのですが、
UserAgentでIE以外をはじく設定になっているのでしょうか?

掲示板に書くのもあれなので、こち


掲示板に書くのもあれなので、こちらにて失礼します。
意図的にそうしていないのですが、閲覧禁止IPの設定の問題かも知れません。cgi弄ってみましたので試してみてください。
前回のコメントが乱文になっていてすみません。 今確認してみたところ、Chrome,Firefoxともに正常に見られるようになりました。お手数をおかけしてすみませんでした。ありがとうございます。
ご報告ありがとうございます。乱文になってしまったのはタグを使われたからだと思いますが、どうもMovableTypeのバグのようで、改行がうまく再現できないんですよね。アップデートも面倒なので伸び伸びになってます…。
私もブログ構築にMovableTypeを使用していますが、5.04の段階では問題なく改行できているようです。コミュニケーション設定にあるテキストフォーマットを"改行を変換"にするとタグを入れなくても改行できるようになるようなのですが、にがさんがお使いのバージョンではどうですか?
なぜか改行を変換する設定にすると、コメント欄が一切表示されなくなってしまいます。かといってタグを使うと上の表示みたいになります。理由はまったくわかりません。仕方ないので改行無しで表示させてます。

コメントする

にがHP(母屋)

このブログ記事について

このページは、にがが2010年5月19日 19:12に書いたブログ記事です。

ひとつ前のブログ記事は「昭和のなつかしキット」です。

次のブログ記事は「ラジオ直した」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

Powered by Movable Type 5.04