zddbbs.pl
require './zddbbs.pl'; # zddbbs.pl を読み込むメッセージの書き込みルーチンの最初の方で、書き込みを許可するかどうかの検査を行います。
$ret1 = &zddbbs'check_size( $query, 4096 ); # 日本語2000文字程度まで
$ret2 = &zddbbs'check_post( 1, 'http://www.foo.or.jp/~bar/' ); # URL は適当に変える
$ret3 = &zddbbs'check_user( 1,0,1,0 );
# 投稿者の情報を得るために、エラー処理を check_user の後まで遅らせます。
if ( $ret1 > 0 ) { # check_size の検査にNGの場合のエラー処理
&zddbbs'rec_logfile( 'zddbbs.log', 50 ); # ログファイルに記録する
&error( '書き込み文字数が多すぎます' );
}
$ret4 = &zddbbs'check_frq( $message );
# ここでは、&zddbbs'check_str は使用していません。
$ret6 = &zddbbs'check_dup( 'zddbbs.dat',$message,1,$ENV{'REMOTE_ADDR'},60 );
&zddbbs'rec_logfile( 'zddbbs.log', 50 ); # ログファイルに記録する
# エラー処理を遅らせると、不正に関する情報がそれだけ多く得られます。
if ( $ret2 ) {
&error( 'POST 以外や外部からの投稿は受け付けません' );
}
# 悪意の投稿者にはあまり多くの情報を提示しないようにします。
# ただし、善意の投稿者を誤って排除するおそれを考慮してエラーメッセージを考えてください。
if ( $ret3 || $ret4 ) {
&error( '申し訳ありません。今回の書き込みを禁止させて頂きます。'.
'誤って禁止してしまった場合は、管理者までご連絡ください。' );
}
if ( $ret6 == 1 ) {
&error( '重複したメッセージの書き込みを制限しています。' );
}
elsif ( $ret6 == 2 ) {
&error( '同一人の1分以内の連続書き込みを制限しています。' );
}
# ▼▼悪戯防止ライブラリ▼▼ require './zddbbs.pl'; push( @taboo, 'とっても下品な言葉'); # ▲▲悪戯防止ライブラリ▲▲また、下の行(152行目)
# ▼▼悪戯防止ライブラリ▼▼
$ret1 = &zddbbs'check_size( $query_string, 2000 );
$ret2 = &zddbbs'check_post( 1, 'http://www.foo.or.jp/~bar/' ); # URL は適当に変える
$ret3 = &zddbbs'check_user( 1,0,1,0 );
if ( $ret1 ) {
&zddbbs'rec_logfile( 'zddbbs.log', 50 );
&error( '<H3>書き込み禁止</H3><BR>申し訳ありません。<BR>'.
'書き込み文字数が多すぎます。' );
}
$ret4 = &zddbbs'check_frq( $FORM{'MESSAGE'} );
$ret5 = &zddbbs'check_str( "$FORM{'MESSAGE'} $FORM{'FROM'} $FORM{'URL'}", *taboo );
$ret6 = &zddbbs'check_dup( 'zddbbs.dat',$FORM{'MESSAGE'},1,$ENV{'REMOTE_ADDR'},60 );
&zddbbs'rec_logfile( 'zddbbs.log', 50 );
if ( $ret2 || $ret3 || $ret4 || $ret5 || $ret6 > 0 ) {
&error( '<H3>書き込み禁止</H3><BR>申し訳ありません。<BR>'.
'今回の投稿は受け付けられません。' );
}
# ▲▲悪戯防止ライブラリ▲▲
そして、スクリプトの最後に、以下の行を追加します。
# ▼▼悪戯防止ライブラリ▼▼
sub error {
local( $msg ) = @_;
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>Board room</TITLE></HEAD><BODY BGCOLOR=white>\n";
print "$msg\n";
print "</BODY></HTML>\n";
rmdir("lock/wwwboard.loc");
exit( 0 );
}
# ▲▲悪戯防止ライブラリ▲▲
# ▼▼悪戯防止ライブラリ▼▼ require './zddbbs.pl'; # zddbbs.pl を読み込む push( @forbidden, '123.123.123.' ); # 書き込みを禁止するIPアドレスを登録する push( @forbidden, '134.134.8[1-5].' ); push( @taboo, '禁止用語1' ); # 書き込みを禁止する言葉を登録する push( @taboo, '禁止用語2' ); # ▲▲悪戯防止ライブラリ▲▲また、391行目の
# ▼▼悪戯防止ライブラリ▼▼
$ret1 = &zddbbs'check_size( $buffer, 4096 );# 日本語2000文字程度まで
# $ret2 = &zddbbs'check_post( 1, $reload ); # $ref_axs = 1; が設定されているなら不要
$ret3 = &zddbbs'check_user( 1,0,1,0,*forbidden );
# 投稿者の情報を得るために、エラー処理を check_user の後まで遅らせます。
if ( $ret1 > 0 ) { # check_size の検査にNGの場合のエラー処理
&zddbbs'rec_logfile( 'zddbbs.log', 50 ); # ログファイルに記録する
&error( '悪戯防止', '書き込み文字数が多すぎます' );
}
$ret4 = &zddbbs'check_frq( $FORM{'value'} );
$ret5 = &zddbbs'check_str( $FORM{'subject'} . $FORM{'value'}, *taboo );
$ret6 = &zddbbs'check_dup( 'zddbbs.dat',$FORM{'value'},1,$ENV{'REMOTE_ADDR'},60 );
&zddbbs'rec_logfile( 'zddbbs.log', 50 ); # ログファイルに記録する
if ( $ret3 || $ret4 || $ret5 ) {
&error( '悪戯防止', '申し訳ありません。今回の書き込みを禁止させて頂きます。'.
'誤って禁止してしまった場合は、管理者までご連絡ください。' );
} # エラーコードは知らせない!($ret5 の禁止文字列は知らせてもよい)
if ( $ret6 == 1 ) {
&error( '悪戯防止', '重複したメッセージの書き込みを制限しています。' );
}
elsif ( $ret6 == 2 ) {
&error( '悪戯防止', '同一人の1分以内の連続書き込みを制限しています。' );
}
# ▲▲悪戯防止ライブラリ▲▲