#!/usr/bin/perl #↑設置するサーバー環境に合わせてPerlのパスを指定して下さい。 #************************************************************************** #┌──────────────────────────────────── #│一行掲示板1(v1.0) #│http://orange.okiron.net/ #│ #│改造・改変はご自由にしてくださってかまいません。 #│このスクリプトを使用して生じたいかなる損害に対して、当方は一切の責任を負いません。 #│【利用規約】http://orange.okiron.net/note.html #└──────────────────────────────────── #************************************************************************** #************************************************************************** # 初期設定 ここから #************************************************************************** # #【注意】 # ●設定は「'」又は「"」で囲まれた部分を変更して下さい。 # ●変更の際に「'」や「;」などの記号を消してしまわないようご注意下さい。 # ●設定は特に指定がない限り半角英数字及び半角の記号で行って下さい。 # #■このファイルの先頭の1行のperlのパスを指定してください。 # 普通は、#!/usr/local/bin/perl か、#!/usr/bin/perl です。 # 「#!」の前には、空白や空行や他の文字が入らないようにしてください。 # #■このCGIスクリプトのファイル名 $fname = "gb.cgi"; # ファイル名を変更する場合は必ずここも変更してください。拡張子は「.cgi」で。 # #■ログファイル名 $log = 'gb_log.cgi'; # ファイル名を変更する場合は必ずここも変更してください。拡張子は、「.log」「.data」などお好きに。 # #■タイトル(全角可) $title = 'ツナツナ主義者'; # #■「HOME」のリンク先 $home = "http://27x27.xxxxxxxx.jp/"; # 相対パスでもOKです。 # #■Name欄が未入力の場合の名前(全角可) $no_name = 'no-name'; # #■Name欄の最大文字数 $name_max = '10'; # 例)'20'と指定した場合、半角文字なら最大20文字、全角文字なら最大10文字となります。 # #■URL欄の最大文字数 $url_max = '50'; # #■Comment欄の最大文字数 $com_max = '100'; # #■ログ表示件数 $view = '500'; # これより古い記事は順次削除されます。 # #■管理人として投稿する時のパスワード $admin_pass = '2715'; # Name欄にこのパスワードを入力すると、次に指定する文字色で管理人名が表示されます。 # #■管理人名(全角可) $admin_name = '管理人*依血檎'; # #■管理人名の文字色 $admin_color = 'orangered'; # #■スパム対策1 0=しない 1=する $host_check = '1'; # ホスト名が取得できない場合、投稿を拒否します。 # #■スパム対策2 0=しない 1=する $com_check = '1'; # コメントに全角文字が含まれない場合、投稿を拒否します。 # #■NGワード(全角可) @deny_words = ("アダルト","エロ","出会い系","adult"); # 名前・コメントにこれらの言葉が含まれる場合、投稿を拒否します。 # いくつでも追加できます。何も拒否しない場合は、() # #■投稿禁止IPアドレス @deny_addr = (); # 複数記述例)("12.34.56.78","123.456.78.910") # #************************************************************************** # 初期設定 ここまで #************************************************************************** require './jcode.pl'; &form_decode; #********************************* # モードの判定 #********************************* if ($in{'mode'} eq 'regist') { ®ist; } else { &html; } #********************************* # ログの保存と表示の更新 #********************************* sub regist{ &get_date; $addr = $ENV{'REMOTE_ADDR'}; $host = gethostbyaddr(pack("C4", split(/\./,$addr)), 2)||"-"; if($host_check eq "1" && $host eq ""){&error("リモートホスト名が取得できません。");} foreach $deny_ip (@deny_addr) {if ($addr eq $deny_ip) {&error("投稿が禁止されたリモートアドレスです。");}} if($url && $url !~ /^https?:\/\/[\w\-.,:;\~\^\/?\@&=+\$%#!]+$/){&error("URLの書式が正しくありません。");} foreach $deny_word (@deny_words) {if ($name =~ /$deny_word/i) {&error("お名前が不適切です。");} } if(length($name) > $name_max) {&error("お名前が制限文字数を超えています。");} if(!$com){&error("コメントを入力してください。");} foreach $deny_word (@deny_words) {if ($com =~ /$deny_word/i) {&error("コメントが不適切です。");} } if($com_check && $com !~ /[^\w\-.,:;\~\^\/?\@&=+\$%#!  ]/) {&error("コメントに日本語がありません。");} if(length($url) > $url_max) {&error("URLが制限文字数を超えています。");} if(length($com) > $com_max) {&error("コメントが制限文字数を超えています。");} if(!$name) {$name = $no_name;} open(IN,"$log"); @lines=; close(IN); ($b_num,$b_host,$b_date,$b_name,$b_url,$b_com) = split(/<>/,$lines[0]); chomp($b_com); if ($host eq $b_host && $com eq $b_com){close(IO); &error("重複投稿です。");} $num = $b_num + 1; unshift(@lines,"$num<>$host<>$date<>$name<>$url<>$com\n"); if($view) {splice @lines,$view;} open(OUT,"+< $log"); eval{truncate(OUT, 0);}; seek(OUT, 0, 0); print OUT @lines; close(OUT); $mode = ""; &html; } #********************************* # 入力フォーム&ログの表示 #********************************* sub html { open(IN,"$log") || &error("Can't Open LogFile"); @lines=; close(IN); print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "$title\n"; print "\n"; print "\n"; print "
\n"; print "
\n"; print "
HOME
\n"; print "
$title
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
Name URL Comment
\n"; print "
\n"; print "
\n"; print "\n"; foreach $data(@lines) { chomp($data); ($num,$host,$date,$name,$url,$com) = split(/<>/,$data); print "\n"; print "\n"; if($name eq $admin_pass){ print "\n"; } else{ print "\n"; } print "\n"; if($url){ print "\n"; } else{ print "\n"; } print "\n"; print "\n"; } print "
$num$admin_name$name$dateHOMEHOME$com
\n"; print "
ページトップへ
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; exit; } #********************************* # エラーページ #********************************* sub error { print "Content-type: text/html\n\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "エラー\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "
エラー
\n"; print "
$_[0]
\n"; print "
\n"; print "戻る\n"; print "
\n"; print "
\n"; print "\n"; exit; } #********************************* # 書き込み日時の取得 #********************************* sub get_date { $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year = $year - 100; $mon++; if ($year < 10) { $year = "0$year"; } if ($mon < 10) { $mon = "0$mon"; } if ($mday < 10) { $mday = "0$mday"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } if ($sec < 10) { $sec = "0$sec"; } $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $date = "$year/$mon/$mday $week"; } #********************************* #入力値のデコード #********************************* sub form_decode { if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/, $buffer); foreach $pair (@pairs){ ($name, $value) = split(/=/, $pair); $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*name,'sjis'); &jcode'convert(*value,'sjis'); $value =~ s//>/g; $value =~ s/\,/,/g; $value =~ s/\r\n/\n/g; $value =~ s/\r/\n/g; $in{$name} = $value; } $mode = $in{'mode'}; $name = $in{'name'}; $url = $in{'url'}; $com = $in{'com'}; $com =~ s/\r\n\n/
/g; $com =~ s/\r\n/
/g; $com =~ s/\r|\n/
/g; }