KENT WEBのpatioの迷惑書き込みの防止策の追加。変更部分のみコードのメモ。
patio_20170522
- ファイル:regist.cgi
- form_checkで、タイトルの日本語全角文字数による書き込み制限。
#-----------------------------------------------------------
# フォーム入力チェック
#-----------------------------------------------------------
sub form_check {
# 改行カット
$in{sub} =~ s/<br>//g;
$in{name} =~ s/<br>//g;
$in{pwd} =~ s/<br>//g;
$in{captcha} =~ s/<br>//g;
$in{comment} =~ s/(<br>)+$//g;
# コード変換
if ($cf{chg_code} == 1) {
require Jcode;
Jcode->new($in{name})->sjis;
Jcode->new($in{comment})->sjis;
}
# チェック
if ($cf{no_wd}) { no_wd(); }
if ($cf{jp_wd}) { jp_wd(); }
if ($cf{urlnum} > 0) { urlnum(); }
# 未入力の場合
$in{sub} ||= '無題';
if ($in{url} eq 'http://') { $in{url} = ''; }
# 投稿内容チェック
my $err;
my $in_sub;
# 2017-05-22 vvvvv
my ($one, $two)=kazoeru($in{sub});
if ($two<5) {
$err .= "入力チェック制限No01により保存は出来ません:".$two."<br>";
}
# 2017-05-22 ^^^^^
if ($in{name} eq "") { $err .= "名前は記入必須です<br>"; }
if ($in{email} ne '' && $in{email} !~ /^[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,6}$/) {
$err .= "E-mailの入力内容が不正です<br>";
}
if ($in{url} ne '' && $in{url} !~ /^https?:\/\/[\w-.!~*'();\/?:\@&=+\$,%#]+$/) {
$err .= "URL情報が不正です<br>";
}
if ($in{comment} eq "") { $err .= "コメントの内容がありません<br>"; }
if (length($in{comment}) > $cf{max_msg} * 2) {
&error("コメントは全角$cf{max_msg}文字以内で記述してください<br>");
}
error($err) if ($err);
}
# 2017-05-22 vvvvv
# https://oshiete.goo.ne.jp/qa/1095448.html より
sub kazoeru {
#戻り値 (1バイト文字の数,2バイト文字の数)
my($one, $two);
$one = 0;
$two = 0;
while ($_[0] =~ /([\x81-\x9F\xE0-\xFC][\x40-\x7E\x80-\xFC])|./g) {
if (defined $1) {
# 2バイト文字を1個発見!!
$two++;
} else {
# 違ったみたい..1バイト文字としてカウント
$one++;
}
}
return ($one, $two);
}
# 2017-05-22 ^^^^^
patio_20170520
ファイル:regist.cgi
850行目付近
修正前
# 投稿内容チェック
my $err;
if ($in{name} eq "") { $err .= "名前は記入必須です<br>"; }
if ($in{email} ne '' && $in{email} !~ /^[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,6}$/) {
$err .= "E-mailの入力内容が不正です<br>";
}
if ($in{url} ne '' && $in{url} !~ /^https?:\/\/[\w-.!~*'();\/?:\@&=+\$,%#]+$/) {
$err .= "URL情報が不正です<br>";
}
if ($in{comment} eq "") { $err .= "コメントの内容がありません<br>"; }
if (length($in{comment}) > $cf{max_msg} * 2) {
&error("コメントは全角$cf{max_msg}文字以内で記述してください<br>");
}
error($err) if ($err);
}
の
my $err;
の後に
my $in_sub;
$in_sub = $in{sub};
$in_sub =~ s/[a-zA-Z0-9!"#$%&'()-=~_<>]//g;
if (length($in_sub)<20) {
$err .= "入力チェック制限No01により保存は出来ません<br>";
}
を追加します。
修正後
# 投稿内容チェック
my $err;
my $in_sub;
$in_sub = $in{sub};
$in_sub =~ s/[a-zA-Z0-9!"#$%&'()-=~_<>]//g;
if (length($in_sub)<20) {
$err .= "入力チェック制限No01により保存は出来ません<br>";
}
if ($in{name} eq "") { $err .= "名前は記入必須です<br>"; }
if ($in{email} ne '' && $in{email} !~ /^[\w\.\-]+\@[\w\.\-]+\.[a-zA-Z]{2,6}$/) {
$err .= "E-mailの入力内容が不正です<br>";
}
if ($in{url} ne '' && $in{url} !~ /^https?:\/\/[\w-.!~*'();\/?:\@&=+\$,%#]+$/) {
$err .= "URL情報が不正です<br>";
}
if ($in{comment} eq "") { $err .= "コメントの内容がありません<br>"; }
if (length($in{comment}) > $cf{max_msg} * 2) {
&error("コメントは全角$cf{max_msg}文字以内で記述してください<br>");
}
error($err) if ($err);
}
ファイル全体
2017-05-20時点のものを変更しています。バージョンが違うかもしれません。
使えそうなら、ファイル名をregist.cgiにリネームしてアップロードします。オリジナルのファイルはバックアップしておき、もし動かない場合はバックアップしたものを戻して下さい。