>>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/ にアクセスできなくなると全停の悪寒。