bbs.cgi 再開発プロジェクト

このエントリーをはてなブックマークに追加
594※未承諾広告 ◆yBEncckFOU
>>585
> 串を切り替えてこられても連投規制を回避できへんように。
そもそも板単位でやるからみっともないことになっている悪寒。
鯖単位でやるともうちょっとこましになるかと。

連投チェック強化案。
・本文内容を一旦別変数に代入、s/\s|[全角空白(S-JISならば\x8140ほか)]//; で縮小。
・本文内容をバイト単位で加算などの演算(sum)
・その sum が存在するかを、/test/sum/ から検索。
 →存在すれば連投規制。
 →存在しなければ touch /test/sum/time.sum しる。

・/test/sum/date.sum は、crond で毎時数量チェック。規定数以上ある場合は古いものから削除。

極簡単に具体例。
# 本文加工@連投規制用
# IN $FORM{'message'} を受取る。
# OUT 1 で連投の疑い。 0 でスルー(リストに追加)
sub check_message_sum($){
 my $sum;
 $_ = shift;
 s/\s| //g; # 空白文字類の削除。AA板では厳しい?
 while(s/^.//){ $sum += ord $&; } # 単純加算。xor してもいいし、 crc にでも。

# sum データをひろう。
 opendir(SUM,"/test/sum/") or die;
 my @sum_data = grep { /\d+?\.(.*)/; $_ = $1; } readdir(SUM); # 多すぎるようなら制限してみるとか。
 closedir(SUM);
# 一致するものがあれば連投と判定してみる。
 return(1) unless grep { $_ == $sum } @sum_data;

 open(SUM,sprint(qq(>%s\.%s),time,$sum)) or die; # touch しとく。
 close(SUM);
 return(0);
}

所感。
○ IP アドレスやリモホに左右されない。
○ time 値も記録しているので経過時間のチェックにも使えるかと。-C でもいいし。
! 鯖を超えて sum をチェックできると全鯖での連投検索が可能かも。nfs 絡み。
△ /test/sum/ が多すぎる(万単位)ようなら制限してみるとか。
× 実況板などでは耐えられるのか?
× /test/sum/ にアクセスできなくなると全停の悪寒。