#!/usr/local/bin/perl ;# WebGUEST v6.4 (c)rescue.ne.jp ;# ;# Script written by Kazu.Yanaka ;# Scripts Found at: http://www.rescue.ne.jp/ ;# 20/JUL/1999 v6.1 ;# 20/JUL/1999 v6.2 半角カナ→全角カナ処理 TEXTAREAのWRAP=OFF処理 ;# 04/JAN/2000 v6.3 Y2K対応 ;# 01/MAR/2000 v6.4 ホスト名取得処理の修正 #----------------# # 初期設定 # #----------------# #--- 必ずあなたの環境に合わせて書き替える項目 --------------------------------------------# #◆名称 # ''内に記述しますが、'を入れたい場合は '' を "" に替えてください. # ただしその場合、文字によって化けが生じることがあります. # 詳しくは当サイトのFAQを参照してください. $title = '予知夢・正夢コーナー'; #◆ゲストブックの index.html の設置URL(公開する入り口のリンク)を設定 # (index.htmlが省略できる場合もある) $reload = 'http://www.arzance.net/dream/wonder'; #◆管理者キーの設定 # 添付されているcrypt.cgiを実行して生成された「暗号化されたパスワード 」をここにコピーする # 例:$crypt_key = '8KNmFgoPj.4gc'; $crypt_key = 'L03MaD9ScKe86'; #--- 必要に応じて設定する項目 ------------------------------------------------------------# #◆画面の色や背景の設定 (HTML書式) $body = ''; #◆文字の背景色 $title_back = '#333333'; #◆記帳内容を管理者しか見られないようにするかどうか する:1 しない:0 $admin = 0; #◇お礼メール機能を使うかどうか 使う:1 使わない:0 使う場合は■印と□印の設定を行うこと $r_mail = 0; #◇記帳があれば管理者へ内容をメールする メールする:1 しない:0 する場合は■印の設定を行うこと $a_mail = 0; #■◇印のどちらか一方でも1に設定した場合は次の2つを設定する $mailto = 'user@xxx.ne.jp'; # 送信先(管理者の)Eメール $sendmail = '/usr/lib/sendmail'; # 送信スクリプト(sendmail) プロバイダに聞くこと #□お礼メール機能を使う場合にお礼内容を書いたファイルを設定する # sendmail.datには、お礼内容を書いて保存しておくこと. $file2 = './sendmail.dat'; #◆$reloadで設定した設置URL以外のフォームからの投稿を禁止する処置 する:1 しない:0 # 悪戯の防止用ですが、利用サーバやブラウザによっては正規投稿もできなくなる場合もあります. $ref_axs = 0; #◆1記帳の最大記録サイズ(bytes) 0で無制限 # メール機能を使う場合は、不用意に巨大なメールにならないように設定しておきましょう. $max_size = 3000; #◆日本語コード変換ライブラリ(v2.0以降) # guest.cgiと同じ場所に設置する場合はこのままでよい. require './jcode.pl'; #◆内容が書き込まれる記録ファイルのパスを設定 # guest.cgiと同じ場所に設置する場合はこのままでよい. $file = './data.cgi'; #◆管理者削除処理時に、削除する前のデータを記録するバックアップファイルのパスを設定 # guest.cgiと同じ場所に設置する場合はこのままでよい. $backup = './backup.cgi'; #◆海外サーバ等で時差が生じる場合は修正します # 海外時間に+9時間する場合 = localtime(time + 9*60*60); # 海外時間に−9時間する場合 = localtime(time - 9*60*60); ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); #◆入力形式の設定 標準入力:1(post) その他:0(get) # 投稿ボタンを押して Method not implemented.. 等というエラーが出る場合は get で試します. # getの場合は文字制限がありますので長い文章等は途中で切れる可能性があります. # POST:1 GET:0 $method = 1; ########################################################################################### if ($crypt_key eq '') { &error('エラー','管理者キーが設定されていません.'); } @wday_array = ('日','月','火','水','木','金','土'); $date_now = sprintf("%02d年%01d月%01d日(%s)%02d時%02d分%02d秒",$year +1900,$mon +1,$mday,$wday_array[$wday],$hour,$min,$sec); $date_num = sprintf("%02d%02d%02d%02d%02d",$mon +1,$mday,$hour,$min,$sec); # <-変更禁止 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); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'h2z_sjis(*val); &jcode'convert(*value,'sjis'); $value =~ s///g; $value =~ s//>/g; if ($value =~ /\r\n/) { $value =~ s/\r\n/\r/g; } if ($value =~ /\n/) { $value =~ s/\n/\r/g; } $value =~ s/\t//g; if ($name eq 'remove_target') { push(@RM,$value); } else { $FORM{$name} = $value; } } #投稿 if ($FORM{'action'} eq 'regist') { if ($ref_axs) { $ref = $ENV{'HTTP_REFERER'}; $ref_url = $reload; $ref_url =~ s/\~/.*/g; if (!($ref =~ /$ref_url/i)) { &error('利用不可',"「$reload」以外からの投稿は受け付けられません."); } } require './regist.pl'; ®ist; } #閲覧フォーム elsif ($FORM{'action'} eq 'list') { require './list.pl'; &list; } #検索 elsif ($FORM{'action'} eq 'search') { if ($crypt_key =~ /^\$1\$/) { $salt = 3; } else { $salt = 0; } if ($admin && $FORM{'pwd'} eq '') { require './list.pl'; &list; exit; } if ($admin && crypt($FORM{'pwd'}, substr($crypt_key,$salt,2)) ne $crypt_key) { require './list.pl'; &list; exit; } require './search.pl'; &search; } #削除 elsif ($FORM{'action'} eq 'remove') { if ($crypt_key =~ /^\$1\$/) { $salt = 3; } else { $salt = 0; } if (!@RM) { &error('処理エラー','削除する記帳がひとつも指定されていません.'); } if ($FORM{'pwd'} eq '') { &error('パスワードが認証されません',''); } if (crypt($FORM{'pwd'}, substr($crypt_key,$salt,2)) ne $crypt_key) { &error('パスワードが認証されません',''); } require './search.pl'; require './remove.pl'; &remove; &search; } else { &error('処理エラー','実行アクションが指定されていません.'); } exit; sub error { print <<"EOF"; Content-type: text/html\n $title $body

$_[0]

$_[1]

ブラウザの[戻る]ボタンを押して前の画面に移動してください.

EOF exit; } sub cookie_encode { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60); $y0="Sunday"; $y1="Monday"; $y2="Tuesday"; $y3="Wednesday"; $y4="Thursday"; $y5="Friday"; $y6="Saturday"; $m0="Jan"; $m1="Feb"; $m2="Mar"; $m3="Apr"; $m4="May"; $m5="Jun"; $m6="Jul"; $m7="Aug"; $m8="Sep"; $m9="Oct"; $m10="Nov"; $m11="Dec"; @youbi = ($y0,$y1,$y2,$y3,$y4,$y5,$y6); @monthg = ($m0,$m1,$m2,$m3,$m4,$m5,$m6,$m7,$m8,$m9,$m10,$m11); $date_gmt = sprintf("%s\, %02d\-%s\-%04d %02d:%02d:%02d GMT",$youbi[$wdayg],$mdayg,$monthg[$mong],$yearg +1900,$hourg,$ming,$secg); } sub cookie_decode { $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{$reload}); foreach $pair (@pairs) { ($name, $value) = split(/:/, $pair); $COOKIE{$name} = $value; } }