📄 flashbbs.cgi
字号:
$com_wid = 42;
$agent = $ENV{'HTTP_USER_AGENT'};
if ($agent =~ /MSIE 3/i) {
$nam_wid = 65;
$com_wid = 85;
} elsif ($agent =~ /MSIE 4/i) {
$nam_wid = 65;
$com_wid = 55;
} elsif (($agent =~ /[ja]/i) && ($agent =~ /3\./)) {
$nam_wid = 46;
$com_wid = 55;
}
print<<"_EOF_";
<CENTER>
<FORM ACTION="flashbbs.cgi" METHOD="post">
<INPUT TYPE=hidden NAME=id VALUE=$ID>
<INPUT TYPE=hidden NAME=md VALUE=reg>
<INPUT TYPE=hidden NAME=no VALUE=$no>
<INPUT TYPE=hidden NAME=tn VALUE=$tn>
<INPUT TYPE=hidden NAME=lx VALUE=$lx>
<INPUT TYPE=hidden NAME=pwd VALUE=$COOKIE{'pwd'}>
<TABLE>
<TR><TD>
<TABLE><TR><TD><TT>
<B><td>发表主题:</td></B>
</TT></TD><TD>
<INPUT TYPE=text NAME=title SIZE=40 MAXLENGTH=80 style=\"background-color:#FFF9CA;border:1 solid black\">
</TD></TR><TR><TD><TT>
<B><td>填写姓名:</td></B>
</TT></TD><TD>
<INPUT TYPE=text NAME=name SIZE=40 MAXLENGTH=42 VALUE="$COOKIE{'name'}" style=\"background-color:#FFF9CA;border:1 solid black\">
</TD></TR><TR><TD><TT>
<B><td>电子邮件:</td></B>
</TT></TD><TD>
<INPUT TYPE=text NAME=email SIZE=40 MAXLENGTH=120 VALUE="$COOKIE{'email'}" style=\"background-color:#FFF9CA;border:1 solid black\">
</TD></TR></TABLE>
</TD></TR><center><TR><TD>
<TEXTAREA NAME=comment ROWS=6 COLS=50 WRAP="soft" style=\"background-color:#FFF9CA;border:1 solid black\"></TEXTAREA>
</TD></TR><TR><TD>
<INPUT TYPE=submit VALUE="发表文章" style=\"height:23px;background-color:#FFCC00;border:1 solid black\">
<INPUT TYPE=reset VALUE="清除" style=\"height:23px;background-color:#FFCC00;border:1 solid black\">
</TD></TR></TABLE></center>
</FORM>
</CENTER>
_EOF_
}
# [ 记事内容表示 ]
sub kiji_view {
local($data) = $_[0];
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act,$tm_pwd,$rhost,$ipad,$comment) = ÷_data($data);
$comment ="<!--$rhost($ipad)-->$comment";
$comment =~ s/>(>[^<]*)/><FONT COLOR=\"$res_color\">$1<\/FONT>/g;
$comment =~ s/(http:\/\/[\w\.\~\-\/\?\&\+\=\:\@\%]+)/<A HREF=\"$1\" target=new>$1<\/A>/ig;
$comment =~ s/(ftp:\/\/[\w\.\~\-\/]+)/<A HREF=\"$1\" target=new>$1<\/A>/ig;
$comment =~ s/([\w\.\-]+)\@([\w\.\-]+)/<A HREF=\"mailto\:$1\@$2\">$1\@$2<\/A>/ig;
if ($email) { $name = "<A HREF=\"mailto:$email\">$name</A>"; }
print<<"_EOF_";
<CENTER><TABLE WIDTH=80% CELLPADDING=5>
<TR><TD ALIGN="center" BGCOLOR="$kiji_title_bgcolor">
<FONT SIZE=+1 COLOR="$kiji_title_color"><B>$title</B></FONT>
</TD></TR><TR><TD BGCOLOR="fff4c8">
<DIV ALIGN="left">发言者$name<FONT COLOR="$em_color">($date)</FONT></DIV>
<P>
$comment
<P>
</TABLE></CENTER>
_EOF_
}
# [ 记事登录处理 ]
sub regist {
local($title,$name,$email,$comment,$lx,$tn,$pwd,$ref_url) = ($FORM{'title'},$FORM{'name'},$FORM{'email'},$FORM{'comment'},$FORM{'lx'},$FORM{'tn'},$FORM{'pwd'},$ENV{'HTTP_REFERER'});
#########################
$name = &killbadwords("$FORM{'name'}");
$title = &killbadwords("$FORM{'title'}");
$email = &killbadwords("$FORM{'email'}");
$comment = &killbadwords("$FORM{'comment'}");
#########################
$title =~ s/\r\n//g;
$title =~ s/\r|\n//g;
$name =~ s/\r\n//g;
$name =~ s/\r|\n//g;
$email =~ s/\r\n//g;
$email =~ s/\r|\n//g;
$comment =~ s/\r\n/<BR>/g;
$comment =~ s/\r|\n/<BR>/g;
$lx++;
$pwd =~ s/\r\n//g;
$pwd =~ s/\r|\n//g;
$ref_url =~ s/\?(.|\n)*//g;
s/\%7E/\~/g;
if($base_url && ($ref_url !~ $base_url)){
&error(1,"不正确。$ref_url<BR>\n");
}
if (length($title) > 80) {
&error(1,"错误、请重新输入。");
} elsif (!$title) { $title = "没有主题"; }
if ((!$name) || (length($name) > 42)) {
&error(1,"没有输入名字,或者字数过多了。");
}
if ((($email !~ /(.*)\@(.*)\.(.*)/) && ($email)) || (length($email) > 120)) {
&error(1,"不正确的电子邮件、或者字数过多了。");
}
if ((!$comment) || (length($comment) > $max_msg)) {
&error(1,"没有输入文章内容、或者字数过多了。");
}
if ((!$pwd) || (length($pwd) > 8)) { $pwd = &make_pwd; }
$file_pwd = crypt($pwd,"FlasH_BBS_Pro");
&get_date;
$count = (&read_file($countfile))[0];
if (++$count > 9999) {
&error(1,"系统错误、请联络本板管理者。");
}
&write_file($countfile,$count);
$count = substr("0000",length($count)).$count;
$rhost = $ENV{'REMOTE_HOST'};
$ipad = $ENV{'REMOTE_ADDR'};
if ($FORM{'no'} eq 'root') {
$kiji_data = "$count<>root<>0<>$count<>$title<>$name<>$email<>$date<>0<>$file_pwd<>$rhost<>$ipad<>$comment\n";
unshift(@logs,$kiji_data);
} else {
foreach $tree (@logs) {
if ($tn == (split(/<>/,$tree))[0]) {
@datas = ÷_log($tree);
$flag1 = 0; $flag2 = 0;
$kiji_data = "$count<>$FORM{'no'}<>$lx<>$tn<>$title<>$name<>$email<>$date<>0<>$file_pwd<>$rhost<>$ipad<>$comment";
foreach $data (@datas) {
if (($flag2 == 1) && ($temp_lx >= (split(/<>/,$data))[2])){
$tree_data = "$tree_data<#>$kiji_data";
$flag2 = 2;
}
if ($flag1) { $tree_data = "$tree_data<#>$data"; }
else { $tree_data = $data; $flag1 = 1; }
if (($FORM{'no'} == (split(/<>/,$data))[0]) && (!$flag2)) {
$flag2 = 1; $temp_lx = (split(/<>/,$data))[2];
}
}
if ($flag2 == 1){ $tree_data = "$tree_data<#>$kiji_data"; }
unshift (@new,"$tree_data\n");
}
else { push (@new,$tree); }
}
@logs = @new;
}
if ($max_size <1500) { $max_size = 1500; }
$size = (stat($logfile))[7];
while ($size > $max_size) { $size -= length(pop(@logs)); }
&write_file($logfile,@logs);
$COOKIE{'name'} = $name;
$COOKIE{'email'} = $email;
$COOKIE{'pwd'} = $pwd;
&set_cookie;
&html_header("文章内容确定");
print<<"_EOF_";
<HR width=80\% color=ffcc00>
<P>
<CENTER>
<B>以下是你文章发表内容。</B>
<P>
<FORM ACTION="flashbbs.cgi">
<INPUT TYPE=hidden NAME=id VALUE=$ID>
<INPUT TYPE="submit" VALUE="确定发表内容" style=\"height:23px;background-color:#FFCC00;border:1 solid black\">
</FORM>
</CENTER>
<P>
<HR width=80\% color=ffcc00>
_EOF_
&kiji_view($kiji_data);
&html_footer;
exit;
}
# [ 投稿者削除处理 ]
sub delete {
@kiji_datas = ÷_log(&search_no2data($FORM{'tn'},@logs));
$kiji_data = &search_no2data($FORM{'no'},@kiji_datas);
local($no,$res,$lx,$tn,$title,$name,$email,$date,$act,$file_pwd,$rhost,$ipad,$comment) = ÷_data($kiji_data);
if (crypt($COOKIE{'pwd'},"FlasH_BBS_Pro") ne $file_pwd) {
&error(1,"没有指定文章删除。");
}
&get_date;
$kazu = @kiji_datas;
if ($kazu == 1) {
foreach $data (@logs) {
if ($FORM{'no'} != (split(/<>/,$data))[0]) { push(@new,$data); }
}
} else {
$kiji_data = "$no<>$res<>$lx<>$tn<><I>[加入主题者删除]</I><>$name<><>$date<>8<>Null<>$rhost<>$ipad<>发表文章者将这则文章删除了。($date)";
$flag = 0;
foreach $data (@kiji_datas) {
if ($flag) { $tree_data .= "<#>"; } else { $flag = 1; }
if ($FORM{'no'} == (split(/<>/,$data))[0]) { $tree_data .= $kiji_data; }
else { $tree_data .= $data; }
}
$tree_data =~ s/\n//;
foreach $data (@logs) {
if ($FORM{'tn'} != (split(/<>/,$data))[0]) { push(@new,$data); }
else { push(@new,"$tree_data\n"); }
}
}
&write_file($logfile,@new);
&html_header("加入主题者删除");
print<<"_EOF_";
<HR width=80\% color=ffcc00>
<P>
<CENTER>
<B>确定将文章内容删除。</B>
<P>
这是暂时将文章删除~要完全删除有待管理者。
<P>
<FORM ACTION="flashbbs.cgi">
<INPUT TYPE=hidden NAME=id VALUE=$ID>
<INPUT TYPE="submit" VALUE="确定" style=\"height:23px;background-color:#FFCC00;border:1 solid black\">
</FORM>
</CENTER>
<P>
_EOF_
}
# [ 处理关连汛用 ]
sub divide_log {
local($data) = $_[0];
chop($data);
return split(/<#>/,$data);
}
sub divide_data {
return split(/<>/,$_[0]);
}
sub search_no2data {
local($no,@datas) = @_;
local($data);
foreach $data (@datas) {
if ($no == (split(/<>/,$data))[0]) { return $data; }
}
return 0;
}
sub read_form {
local($pair,$buffer);
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; }
local(@pairs) = split(/&/,$buffer);
foreach $pair (@pairs) {
local($name,$value) = split(/=/,$pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$FORM{$name} = $value;
}
}
sub check_cookie {
local($text);
foreach $text ('font','sort','tree','form','new_mail','res_mail') {
if (($FORM{$text} ne '') && ($COOKIE{$text} ne $FORM{$text})) { $COOKIE{$text} = $FORM{$text}; }
}
}
sub get_cookie {
local($pair,%DUMMY);
local($cookies) = $ENV{'HTTP_COOKIE'};
local(@pairs) = split(/;/,$cookies);
foreach $pair (@pairs) {
local($name,$value) = split(/=/,$pair);
$name =~ s/ //g;
$DUMMY{$name} = $value;
}
@pairs = split(/,/,$DUMMY{$cookie_name});
foreach $pair (@pairs) {
local($name,$value) = split(/:/,$pair);
$COOKIE{$name} = $value;
}
}
sub set_cookie {
local($cook) = "name\:$COOKIE{'name'}\,email\:$COOKIE{'email'}\,pwd\:$COOKIE{'pwd'}\,font\:$COOKIE{'font'}\,sort\:$COOKIE{'sort'}\,tree\:$COOKIE{'tree'}\,form\:$COOKIE{'form'}\,new_mail\:$COOKIE{'new_mail'}\,res_mail\:$COOKIE{'res_mail'}";
$ENV{'TZ'} = "GMT"; # 国际标准时取得
local($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time + 30*24*60*60);
if ($sec < 10) { $sec = "0$sec"; }
if ($min < 10) { $min = "0$min"; }
if ($hour < 10) { $hour = "0$hour"; }
if ($mday < 10) { $mday = "0$mday"; }
if ($year < 10) { $year = "0$year"; }
$mon = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mon];
$youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wday];
$date_gmt = "$youbi, $mday\-$mon\-$year $hour:$min:$sec GMT";
print "Set-Cookie: $cookie_name=$cook; expires=$date_gmt\n";
}
sub get_date {
$ENV{'TZ'} = "JST$time"; # TimeZone
local($sec,$min,$hour,$day,$mon,$year) = localtime();
$mon++;
if ($date_type) {
if ($sec < 10) { $sec = "0$sec"; } # 秒的修正
if ($min < 10) { $min = "0$min"; } # 分的修正
if ($hour < 10) { $hour = "0$hour"; } # 时的修正
if ($date_type > 1) {
if ($mon < 10) { $mon = "0$mon"; } # 月的修正
if ($day < 10) { $day = "0$day"; } # 日的修正
}
}
$date =~ s/year/$year/ig;
$date =~ s/mon/$mon/ig;
$date =~ s/day/$day/ig;
$date =~ s/hour/$hour/ig;
$date =~ s/min/$min/ig;
$date =~ s/sec/$sec/ig;
}
sub read_file {
local($logfile) = $_[0];
&lock_file($lock1);&lock_file($lock2);
if ($lock_error) { &error(1,"错误、请过一会重新输入。"); }
if (!open(IN,$logfile)) { &unlock_file; &error(1,"记录读入不可"); }
local(@files) = <IN>;
close(IN);
&unlock_file($lock2);&unlock_file($lock1);
return @files;
}
sub write_file {
local($logfile,@lines) = @_;
&lock_file($lock1);&lock_file($lock2);
if ($lock_error) { &error(1,"错误、请过一会重新输入。"); }
if (!open(OUT,">$logfile")) { &unlock_file; &error(1,"删除不到记录"); }
print OUT @lines;
close(OUT);
&unlock_file($lock2);&unlock_file($lock1);
return @lines;
}
sub lock_file {
local($lockfile) = $_[0];
if (!$lock_flag) { return 1; }
local($retry) = 5;
while (-f $lockfile) {
if ($retry-- <= 0) {
local($mtime) = (stat($lockfile))[9];
if ($mtime < time()-60*15) { &unlock_file($lockfile); }
$lock_error = 1;
return 1;
}
sleep 1;
}
open (LOCK,">$lockfile");
close(LOCK);
return 1;
}
sub unlock_file {
local($lockfile) = $_[0];
unlink($lockfile);
}
sub make_pwd {
local($pwd) = '';
srand;
for ($i=0;$i<8;$i++) { $pwd .= substr("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789",int(rand(62)),1); }
return $pwd;
}
sub error {
($err,$err_msg) = @_;
if ($err) { print "Content-type: text/html\n\n<HTML><BODY>"; }
print<<"_EOF_";
<P><TABLE BGCOLOR="white" CELLPADDING=5 WIDTH=100%><TD ALIGN=center>
<FONT COLOR="red"><B>错误:$err_msg</B></FONT>
</TD></TABLE>
</BODY></HTML>
_EOF_
exit;
}
##### KILLBADWORDS #####
sub killbadwords {
my $ThePost = shift;
$ThePost =~s/(\<)(.+?)(\>)//isg;
$ThePost =~s/\‖//isg;
$ThePost =~s/\n//isg;
return ($ThePost);
}
########## END OF SCRIPT ##########
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -