◆荒らし対策を考えて
今のままでは、書き込み内で自由にタグの利用が可能です。勿論、タグを利用したい方はそのままでいいのですが、タグが自由に書き込めると言うことはあらされる可能性が大きいのは事実です。タグを使えなくなるようにすることによって、タグの閉じ忘れや、故意の悪戯等のレイアウトの破壊などを防ぐことが出来ます。ここでは、全てのタグの利用を禁止する方法をご紹介いたします。
◆タグ禁止ルーチン追加
まず、タグとはどういう法則で記述されているかを考えます。結論から言うと『<』と『>』で囲まれた部分ですよね。ですから、『<』と『>』を単純に他の文字と差し替えてしまえば良いのです。差し替える方法として、他の文字に置換するか?削除してしまうか?になるわけですが、ここで特殊文字を用いれるのが一番理想的だと思います。そして、置換するルーチンを挿入する箇所ですが、書き込みが行われる時にタグの制御をしたいわけですから、サブルーチンwriteか、サブルーチンdecodeに挿入可能になります。ここで、どちらが良いか?はそのプログラムにもよりますが、サブルーチンdecodeに挿入した方が多様性に富むので、こちらに挿入しましょう。
#デコードするためのプログラム
sub decode {
# プラウザからのデータ取込み
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
$buffer = $ENV{'QUERY_STRING'};
}
# プラウザからのデータ変換
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
#1行毎に$name,$valueを取り出す
($name, $value) = split(/=/, $pair);
# 変換演算子 tr + を スペースに置き換え
$value =~ tr/+/ /;
# 変換演算子 s/// 単語の構成文字にマッチ
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# " を " に変換
$value =~ s/"/"/g;
#\n を "" に変換
$value =~ s/\n//g;
#< を < に変換
$value =~ s/</</g;
#> を > に変換
$value =~ s/>/>/g;
# 日本語に変換(デコード処理部分)
&jcode'convert(*value,'sjis');
&jcode'convert(*name,'sjis');
$FORM{$name} = $value;
if ($name eq 'url') {
$FORM{$name} =~ s/http:\/\///g;
}
}
}
sub decode {
# プラウザからのデータ取込み
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else {
$buffer = $ENV{'QUERY_STRING'};
}
# プラウザからのデータ変換
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
#1行毎に$name,$valueを取り出す
($name, $value) = split(/=/, $pair);
# 変換演算子 tr + を スペースに置き換え
$value =~ tr/+/ /;
# 変換演算子 s/// 単語の構成文字にマッチ
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# " を " に変換
$value =~ s/"/"/g;
#\n を "" に変換
$value =~ s/\n//g;
#< を < に変換
$value =~ s/</</g;
#> を > に変換
$value =~ s/>/>/g;
# 日本語に変換(デコード処理部分)
&jcode'convert(*value,'sjis');
&jcode'convert(*name,'sjis');
$FORM{$name} = $value;
if ($name eq 'url') {
$FORM{$name} =~ s/http:\/\///g;
}
}
}
以上の4行をサブルーチンdecode内に挿入するだけで、このプログラムの場合OKです。何か一つの処理を加えようとしたときに、物凄く大変な処理をしなければならないのでは?と思われがちですが、こういった小さな処理ひとつひとつを理解、積み重ねることによって大きなプログラムを形成されているので、ちょっとした変更・追加でしたら容易に出来るのです。
□特別編 一緒に簡易掲示板を作ってみよう
第八章 STEP1 作ってみよう | |
・デザイン | まず何が必要になるのか? |
・フローチャート作成 | 掲示板ってどんな処理をさせているの? |
・パーツの記述 | 各パーツごとに実際に記述してみよう |
・最終組み立て | パーツを一つにまとめて完成だ! |
第八章 STEP2 いじくってみよう | |
・最大保持数 | 最大保持数を設定できるようにしよう! |
・メールとURL | 状況によって表示を変えよう |
・タグの使用禁止<< | 荒し対策を考えて |
第九章 STEP3 拡張機能を考える | |
・記事削除 | 記事を削除、ログを削除すると言うことは? |
・ページ機能 | ページ処理の考え方 |
・検索 | 検索させる方法について |
・レス | レス機能ってどんな処理? |
・クッキーの利用 | クッキーの利用方法についての説明 |