先日友人から「1日に1回くらいの頻度で掲示板に広告を書き込まれて困っている」との相談を受けた。
なんでも最初のうちは削除で対応していたが、連日書き込まれるためNGワードの設定など、友人も結構いろいろやったらしいがスパムは一向に止む気配がなかったという。
しかし、いまどきの掲示板は広告スパム対策が行われているものがあり、それを使えばよいのでは?と提案したところ「新しい掲示板を使うことになると過去ログを捨てることになる。それに今の掲示板の使い勝手も気に入っている。」という話
僕は掲示板を使ったことが無かったのでどれも変わらないだろうと思っていたのだが掲示板にも使い勝手があるようです。
早速彼の使っている掲示板を調べてみる。
彼の使っている掲示板は『UPP-BOARD』というもので公式に更新されていないだろうかと調べてみると2002年で更新は止まっているようだった。
こうなれば自分で手を加えるしかないだろうといろいろ調べて試行錯誤し、CAPTCHA認証を入れることにした。
CAPTCHA認証はこちらのサイト のプログラムを利用させていただきました。
以下が作業メモです。
UPP-BOARDを使用中で同じようにスパムに苦しんでいる方がいらっしゃいましたら参考になさってください。
| 1.ダウンロードしたconkey.*の内容をBBSと同じ場所コピーして属性変更 |
image_gen.cgiとkeyinit.plは属性755として実行可能にする。
bg_gen.cgiは背景画像"bg.gif"を作製する時だけ使用するので、デフォルトのbg.gifでよい場合はコピー不要。
1)暗号化キーはデフォルトのままだと突破される恐れがあるので任意に書き換え
2)フォントのパスはサーバーに合わせて変更(友人の「vine Linux」では下記)
$font = '/usr/X11R6/lib/X11/fonts/TTF/luxirb.ttf'; |
3)確認キーチェックのサブルーチンの「&error」文字列をupb.cgiの仕様に合わせて「&er_」に書き換える
なお、私はデフォルトで設定されている「キーワード」を「確認キー」に変更しました。(削除の時に使う文字列を「削除キー」としていたため。)
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'; |
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> |
高橋 大吾
翔泳社
売り上げランキング: 95269