Files
ore/inc/ore_sub-bbs.cgi
T

288 lines
7.9 KiB
Perl
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
$index = './index.cgi'; # 죄와 벌++ 탑 페이지
$usrdata = "./usrdata/"; # 캐릭터 데이터 보관 디렉터리.
$no_window = 1; # 현상유지·구속시간 이외의 다른 창 금지(0:없음 1:있음)[부하 방지 대책]
# 각국 설정 정보
@camp_info =( ['무소속', '#eeeeee'],
['알메리아 왕국', '#ee9999'],
['플라린 교국', '#00eeee'],
['이기스 연합국', '#88ee88'],
['소디나 제국', '#ffccff'],
['야마토 신국', '#55bbff']);
# 칭호
@sogo_p =('----','패자','영웅','빚쟁이 왕','귀축',' ',' ',' ',' ',' ','관리자');
# 디버그 모드
# 없음: PC·모바일 양쪽 대응
# pc : PC 한정 모드(모바일 미대응)
# mv : 모바일 고정 모드(PC상에서 모바일 화면을 에뮬레이트 표시)
$mv_mode = '';
# 기기별 설정
if( $ENV{'HTTP_USER_AGENT'}=~/DoCoMo/ ||
$ENV{'HTTP_USER_AGENT'}=~/UP\.Browser/ ||
$ENV{'HTTP_USER_AGENT'}=~/J-PHONE/ ||
$ENV{'HTTP_USER_AGENT'}=~/ASTEL/ ||
$ENV{'HTTP_X_JPHONE_MSNAME'} || $mv_mode eq 'mv'){
$mv_mode= 'mv'; # 모바일용 플래그(변경 불가)
$method = "GET"; # 폼 메서드(모바일)
}else{
$mv_mode= 'pc'; # PC용 플래그(변경 불가)
$method = "POST"; # 폼 메서드(PC)
# 스타일 시트
$css =<<EOM;
<style type="text/css">
<!--
.button1{
font-family: "MS Pゴシック", "Osaka"; font-size: 12px; font-weight: 400; color: #bbbbcc;
border: 2px #9999cc ridge; cursor: hand; background-color: #333366;
}
body { font-size: 12pt;}
.mem { font-size: 10pt; color:#ddddee}
.date { font-size: 10pt; color:#dddddd}
.f1{font-size:16pt; font-family:'Symbol','Palatino'; color:#ff99cc;}
-->
</style>
EOM
}
# 호スト名取得モード
# --> 0 : $ENV{'REMOTE_HOST'} で取得できる場合
# --> 1 : gethostbyaddr で取得できる場合
$get_remotehost = 1;
# 다른 사이트로부터의 투고 배제 시에 지정 (http://부터 작성)
$base_url = "";
# 액세스 제한(호스트명 또는 IP 주소 기술)
@deny = (
"anonymizer.com",
"cache*.*.interlog.com",
"",
""
);
#===============================================================================
# 이하 처리 기본적으로 이 이하는 수정하지 않도록.
#-------------------------------------------------------------------------------
# 참가자 데이터 개별 읽기
sub mandata_open{
open(IN,"$usrdata$id\.cgi") || &error("Open Error : $usrdata$id\.cgi");
$dat = <IN>;
close(IN);
%DAT = '';
my @prats = split(/,/,$dat);
foreach (0 .. $#prats){
my($key,$v) = split(/;/,$prats[$_]);
$DAT{$key} = $v;
}
if($pw ne $DAT{'pw'}){ &error("비밀번호가 틀렸습니다"); }
if($no_window){
&error("현재 이벤트를 종료한 후에 이용해 주십시오.") if($DAT{'pr'}<=0 && $DAT{'type'});
}
}
#-------------------------------------------------------------------------------
# 디코드 처리
sub decode {
local($buffer, @pairs, $name, $value);
$post_flag=0;
if($ENV{'REQUEST_METHOD'} eq "POST"){
$post_flag=1;
&error("투고량이 너무 많습니다") if($ENV{'CONTENT_LENGTH'}>8192);
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}else{
$buffer = $ENV{'QUERY_STRING'};
&error("투고량이 너무 많습니다") if(length($buffer)>7500)
}
@pairs = split(/&/, $buffer);
foreach (@pairs) {
($name,$value) = split(/=/);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
# 문자 코드를 Shift_JIS 변환
# &jcode'convert(*value, "sjis", "", "z");
$value =~ s/\&/&amp\;/g;
$value =~ s/\;/&#59\;/g;
$value =~ s/\,/&#44\;/g;
# 태그 처리
if ($tagkey) {
$value =~ s/<!--(.|\n)*-->//g;
$value =~ s/<>/&lt;&gt;/g;
} else {
$value =~ s/</&lt;/g;
$value =~ s/>/&gt;/g;
$value =~ s/\"/&quot;/g;
}
# 개행 등 처리
if ($name eq "comment" && $br_mode) {
$value =~ s/\r\n/<br>/g;
$value =~ s/\r/<br>/g;
$value =~ s/\n/<br>/g;
} else {
$value =~ s/\r//g;
$value =~ s/\n//g;
}
# 도배 처리 1
$value =~ s/(<br>){4,}//g;
$value =~ s/( | ){6,}//g;
# 기호 교체
$value =~ s/\//&#47\;/g;
$value =~ s/\./&#46\;/g;
$value =~ s/cgi/&#99\;&#103\;&#105\;/g;
$in{$name} = $value;
}
&no_link($in{'comment'}) if($nolink);
$com = $in{'comment'}; if(length($in{'comment'})>$com_limit) { &error("글자 수 에러입니다 1"); }
$mode = $in{'mode'}; if(length($in{'mode'})>10) { &error("글자 수 에러입니다 2"); }
$pw = $in{'pw'}; if(length($in{'pw'})>8 || !$in{'pw'}) { &error("글자 수 에러입니다 3"); }
$id = $in{'id'}; if(length($in{'id'})>24 || !$in{'id'}) { &error("글자 수 에러입니다 4"); }
$ids = $in{'ids'}; if(length($in{'ids'})>12) { &error("글자 수 에러입니다 5"); }
$rd = $in{'rd'}; if(length($in{'rd'})>1) { &error("글자 수 에러입니다 6"); }
if ($base_url) {
$ref_url = $ENV{'HTTP_REFERER'};
$ref_url =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if ($ref_url !~ /$base_url/i) { &error("잘못된 접근입니다"); }
}
}
#-------------------------------------------------------------------------------
# 에러 처리
sub error {
if (-e $lockfile) { unlink($lockfile); }
&header(1);
print "<center><hr width='75%'><P><h3>ERROR !</h3>\n";
print "<P><font color=red><B>$_[0]</B></font>\n";
print "<P><hr width='75%'></center>\n";
&copyright;
exit;
}
#-------------------------------------------------------------------------------
# 락 파일 생성
sub lock {
local($lflag) = 0;
foreach (1 .. 5) {
if (-e $lockfile) { sleep(1); }
else {
open(LOCK,">$lockfile") || &error("Can't create $lockfile");
close(LOCK);
$lflag = 1;
last;
}
}
if ($lflag == 0) { &error("LOCK is BUSY"); }
}
#-------------------------------------------------------------------------------
# 액세스 체크(액세스 거부)
sub axs_check {
&get_host;
local($flag)=0;
foreach (@deny) {
if (!$_) { next; }
$_ =~ s/\*/\.\*/g;
if ($host =~ /$_/i || $addr =~ /$_/i) { $flag=1; last; }
}
if ($flag) { &error("액세스가 허용되지 않았습니다"); }
}
#-------------------------------------------------------------------------------
# 호스트 정보 취득
sub get_host {
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
$agent = $ENV{'HTTP_USER_AGENT'};
if ($get_remotehost) {
if ($host eq "" || $host eq "$addr") {
$host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);
}
}
if ($host eq "") { $host = $addr; }
}
#-------------------------------------------------------------------------------
# 시간 취득
sub get_time {
$time = time;
($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime($time);
$hour= "0$hour" if($hour<10);
$min = "0$min" if($min<10);
$sec = "0$sec" if($sec<10);
$month++;
$month = "0$month" if(month<10);
@week=('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
$date = "$month/$mday($week[$wday]) $hour:$min";
srand($time);
}
#-------------------------------------------------------------------------------
# 플레이 규제
sub safetime {
foreach (0 .. $#safetime){
&error("플레이 규제 시간 중입니다. 잠시만 기다려 주십시오.") if $hour eq $safetime[$_];
}
}
#-------------------------------------------------------------------------------
# URL 배제
sub no_link {
$_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#\%]+)/$1<!-- $2 -->/g;
}
#-------------------------------------------------------------------------------
# 삭제/변경 불가 반드시 표시할 것
# 저작권 표시(삭제/변경 불가)
sub copyright{
if($mv_mode eq 'mv'){
print <<"EOM";
<br><hr color="white">
과거의 영광 $ver<br>
<a href="http://pom.to/" target="_blank">BLANK BOARD[인터넷 유원지♪]</a>
</body>
</html>
EOM
}else{
print <<"EOM";
<div align="right" style="font-size:12px">
$ver<br>
<a href="http://www17.big.or.jp/~obochan/vivid/" target="_blank" style="font-size:13px">Vivid Studio.</a><br>
<a href="http://pom.to/" target="_blank" style="font-size:11px">BLANK BOARD[인터넷 유원지♪]</a>
</div>
</body>
</html>
EOM
}
}
1;#삭제 불가