EOM
#!/usr/bin/perl
use CGI;
use vars qw(%set %in);
use strict;
$set{'log_file'} = './log.cgi'; #ログファイル名
$set{'max_log'} = 30; #保持件数
$set{'max_size'} = 1*1024; #最大投稿容量(KB)
$set{'min_flag'} = 0; #最小容量制限を使用する=1
$set{'min_size'} = 100; #最小投稿容量(KB)
$set{'max_all_flag'} = 0; #総容量制限を使用する=1
$set{'max_all_size'} = 20*1024; #総制限容量(KB)
$set{'file_pre'} = 'up'; #ファイル接頭辞
$set{'pagelog'} = 10; #1ページに表示するファイル数
$set{'base_html'} = 'upload.html'; #1ページ目のファイル名
$set{'interval'} = 0; #同一IP投稿間隔秒数
$set{'deny_host'} = ''; #投稿禁止IP/HOST ,で区切る ex.(bbtec.net,219.119.66,ac.jp)
$set{'admin_name'} = 'admin'; #管理者ログインID
$set{'admin_pass'} = '1234'; #管理者パスワード
# 以下5項目を再設定する際にはPATH,ディレクトリは / で終わること
# $set{'html_dir'},$set{'base_cgi'}を ./ 以外に設定する場合,
# またはDLkeyを使用し なおかつHTMLキャッシュ($set{'dummy_html'} = 2 or 3)を使用する場合は
# $set{'base_cgi'} , $set{'http_html_path'} , $set{'http_src_path'} をフルパス(http://〜〜 or /〜〜)で記述する
$set{'html_dir'} = './'; # 内部HTML保存ディレクトリ
$set{'src_dir'} = './src/'; # 内部ファイル保存ディレクトリ
$set{'base_cgi'} = './upload.cgi'; # このスクリプト名 http://〜の指定可能
$set{'http_html_path'} = './'; # html参照 httpPATH http://〜の指定可能
$set{'http_src_path'} = './src/'; # file参照 httpPATH http://〜の指定可能
$set{'dlkey'} = 0; # DLKeyを使用する=1,DLkey必須=2
$set{'up_ext'} = 'txt,lzh,zip,rar,gca,mpg,mp3,avi,swf,bmp,jpg,gif,png'; #アップロードできる基本拡張子 半角英数小文字 ,で区切る
$set{'up_all'} = 0; #登録以外のものもUPさせられるようにする=1
$set{'ext_org'} = 0; #$set{'up_all'}が1の時オリジナルの拡張子にする=1
$set{'deny_ext'} = 'php,php3,phtml,rb,sh,bat,dll'; #投稿禁止の拡張子 半角英数小文字 ,で区切る
$set{'change_ext'} = 'cgi->txt,pl->txt,log->txt,jpeg->jpg,mpeg->mpg'; #拡張子変換 前->後 半角英数小文字 ,で区切る
$set{'home_url'} = ''; #[HOME]のリンク先 相対パス又は http://から始まる絶対パス
$set{'html_all'} = 1; #[ALL]を出す=1
$set{'dummy_html'} = 0; #ファイル個別HTMLを作成する 通常ファイルのみ=1,DLKey設定ファイルのみ=2,すべて=3
$set{'find_crypt'} = 1; #暗号化ZIPを検出する=1
$set{'binary_compare'} = 0; #既存ファイルとバイナリ比較する=1
$set{'post_flag'} = 0; #PostKeyを使用する=1
$set{'post_key'} = 'postkey'; #PostKey ,で区切ると複数指定 ex.(postkey1,postkey2)
$set{'disp_error'} = 1; #ユーザーにエラーを表示する=1
$set{'error_level'} = 1; #エラーログを記録する=1
$set{'error_log'} = './error.cgi'; #エラーログファイル名
$set{'error_size'} = 1024; # エラーログ最大容量(KB) 制限なし=0
$set{'zero_clear'} = 1; #ファイルが見つからない場合ログから削除する=1
$set{'disp_comment'} = 1; #コメントを表示する=1
$set{'disp_date'} = 1; #日付を表示する=1
$set{'disp_size'} = 1; #サイズを表示する=1
$set{'disp_mime'} = 1; #MIMETYPEを表示する=1
$set{'disp_orgname'} = 1; #オリジナルファイル名を表示する=1
$set{'per_upfile'} = 0666; #アップロードファイルのパーミッション suexec=0604,other=0666
$set{'per_dir'} = 0777; #ソースアップディレクトリのパーミッション suexec=0701,other=0777
$set{'per_logfile'} = 0666; #ログファイルのパーミッション suexec=0600,other=0666
$set{'link_target'} = ''; #target属性
#------
$set{'ver'} = '21:09 2005/10/10d CGI.pm';
$set{'char_delname'} = 'D';
$in{'time'} = time(); $in{'date'} = conv_date($in{'time'});
$in{'addr'} = $ENV{'REMOTE_ADDR'};
$in{'host'} = gethostbyaddr(pack('c4',split(/\./, $in{'addr'})), 2) || $ENV{'REMOTE_HOST'} || '(none)';
if($in{'addr'} eq $in{'host'}){ $in{'host'} = '(none)'; }
$set{'html_head'} =<<"EOM";
$set{'html_css'} =<<"EOM";
EOM
unless(-e $set{'log_file'}){ &init; }
unless(-e $set{'base_html'}){ &makehtml; }
{ #デコード
if ($ENV{'REQUEST_METHOD'} eq "POST" && $ENV{'CONTENT_TYPE'} =~ /multipart\/form-data/i){
if ($ENV{'CONTENT_LENGTH'} > ($set{'max_size'} * 1024 + 1024)){ if($ENV{'SERVER_SOFTWARE'} =~ /IIS/){ while(read(STDIN,my $buff,8192)){} } &error(106,$ENV{'CONTENT_LENGTH'});}
}else{
if ($ENV{'CONTENT_LENGTH'} > 1024*100){ error(98); }
}
my %ck; foreach(split(/;/,$ENV{'HTTP_COOKIE'})){ my($key,$val) = split(/=/); $key =~ s/\s//g; $ck{$key} = $val;}
my @ck = split(/<>/,$ck{'SN_USER'});
if(length($ck[0]) < 5){
my @salt = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/'); srand;
my $salt = $salt[int(rand(@salt))] . $salt[int(rand(@salt))];
$in{'user'} = crypt($in{'addr'}.$in{'time'}, $salt);
}else{ $in{'user'} = $ck[0]; }
my $q = new CGI;
$in{'upfile'} = $q->param('upfile');
$in{'tmpfile'} = $q->tmpFileName($in{'upfile'});
$in{'type'} = $q->uploadInfo($in{'upfile'})->{'Content-Type'} if ($in{'upfile'});
$in{'pass'} = $q->param('pass'); $in{'mode'} = $q->param('mode');
$in{'delno'} = $q->param('delno'); $in{'comment'} = $q->param('comment');
$in{'jcode'} = $q->param('jcode'); $in{'delpass'} = $q->param('delpass');
$in{'orgname'} = $in{'upfile'}; $in{'postkey'} = $q->param('postkey');
$in{'org_pass'} = $in{'pass'};
$in{'checkmode'} = $q->param('checkmode');
$in{'file'} = $q->param('file'); $in{'dlkey'} = $q->param('dlkey');
$in{'admin_delno'} = join(',',$q->param('admin_delno'));
my @denyhost = split(/,/,$set{'deny_host'});
foreach my $value (@denyhost){
if ($in{'addr'} =~ /$value/ || $in{'host'} =~ /$value/){ &error(101);}
}
my @form = ($in{'comment'},$in{'orgname'},$in{'type'},$in{'dlkey'});
foreach my $value (@form) {
if (length($value) > 128) { $value = substr($value,0,128).'...'; }
# $value =~ s/&/&/g;
$value =~ s/"/"/g;
$value =~ s/</g;
$value =~ s/>/>/g;
$value =~ s/\r//g;
$value =~ s/\n//g;
$value =~ s/\t//g;
$value =~ s/\0//g;
}
($in{'comment'},$in{'orgname'},$in{'type'},$in{'dlkey'}) = @form;
$in{'tmpfile2'} = &filewrite() if ($in{'upfile'});
}
if($in{'delno'} eq $set{'admin_name'} && $in{'delpass'} eq $set{'admin_pass'}){ &admin_mode(); }
if(!$in{'delno'} && $in{'delpass'} eq $set{'admin_pass'}){ &makehtml(); &quit(); }
if($in{'mode'} eq 'dl'){ &dlfile;} #DL
if($in{'mode'} eq 'delete'){ &delete(); &quit(); }
{#メイン処理
if(!$in{'upfile'}){ &error(99); }
if($set{'post_flag'} && !check_postkey($in{'postkey'})){ error(109); }
if($set{'dlkey'} == 2 && !$in{'dlkey'}){ unlink("$in{'tmpfile2'}"); &error(61); }
open(IN,$set{'log_file'})||&error(303);
my @log =
Now.. Testing..
Uploader
Used ${allsize}\n
";
if($set{'up_all'} && !$set{'ext_org'}){ $footer .= $set{'up_ext'}.' +'; }
elsif(!$set{'up_all'}){ $footer .= $set{'up_ext'}; }
$footer .= "\n
\n\n\n";
$footer .= "