SG soccer ver1.15の不正対策防止方法
- 2011/11/02 08:45
- カテゴリー:Perlなお話
SGsoccerって知ってますか?
へなちょこんSGさんという方の作品で今となっては昔の名CGIゲームです。
コレ昔ドハマりして遊んで改造もさせて頂きました。
私がCGIゲームを弄る切欠になったスクリプトでした。
今も仕事の合間にチョコっと遊ぶには丁度イイんだよね(笑)
まだ本家でまったり遊んでる人もいるのですが最近SGのプログラムの弱点を付く荒らしが居て迷惑してるんですよね。
荒らしって痛いだけって気が付け!今時SGってのも無いし(笑)
まあ気が付かないからやるんでしょうがw
そんなSGsoccerの穴を何かで気が付いてイイ気になって荒らしてるのが居るので対策を書いて起きます。
SGsoccerを設置してるサイトさんもまだいらっしゃるので。
後でコレと同じものを作者のへなさんにもメールしておきます。
へなさんが荒らしに気が付いてない・・・というかSG1自体が開発が終わっている上にサイトが放置気味だったので対策して頂けるか分かりませんが、気長に待ちましょう。
ウチで配布させて頂いてるSG+にも対策版を後日UPしておきます。
同ホストによる当て馬の防止 その1
sgsoccer.pl修正
#
- ---#
# スプリット #
#
- ---#
sub split {if ( $_[0] eq "teamdata" ){
($id,$password,$owner,$teamname,$sys,$tac,$tac2,$fk,$pk,$icon,$date,$win,$lose,$draw,$win_p,$winmax,$sotokuten,$soshiten,$cup,$ip) = split(/<>/,$_[1]);}elsif ( $_[0] eq "playersdata" ){
($shozoku[$i],$p_name[$i],$posi[$i],$pass[$i],$dori[$i],$shoo[$i],$defe[$i],$style[$i],$fair[$i],$score[$i],$hyoka[$i],$cond[$i]) = split(/<>/,$_[1]);}elsif ( $_[0] eq "playerdata" ){
($shozoku,$p_name,$posi,$pass,$dori,$shoo,$defe,$style,$fair,$score,$hyoka,$cond) = split(/<>/,$_[1]);}elsif ( $_[0] eq "winnerdata" ){
#修正
($w_id,$w_teamname,$w_owner,$w_icon,$w_rensho,$w_cup,$before,$w_host,$l_host,$play_time) = split(/<>/,$_[1]); #$l_hostと$play_timeを追加}elsif ( $_[0] eq "rekidai" ){
($re_date,$re_dai,$owner,$teamname,$icon,$win,$lose,$draw,$win_p,$winmax,$sotokuten,$soshiten,$s_shozoku,$s_p_name,$s_posi,$s_score,$s_hyoka,$h_shozoku,$h_p_name,$h_posi,$h_score,$h_hyoka,$shozoku_gk,$p_name_gk,$score_gk,$hyoka_gk,$shozoku_df,$p_name_df,$score_df,$hyoka_df,$shozoku_dmf,$p_name_dmf,$score_dmf,$hyoka_dmf,$shozoku_omf,$p_name_omf,$score_omf,$hyoka_omf,$shozoku_fw,$p_name_fw,$score_fw,$hyoka_fw) = split(/<>/,$_[1]);}elsif ( $_[0] eq "kekka" ){
($log_no,$log_date,$log_card,$log_result,$log_cmt) = split(/<>/,$_[1]);}
}#END split
sgsoccer.cgi修正
#
- ---#
# 試合後処理 #
#
- ---#
sub save_data {# 優勝者ファイル書き込み
#修正
$times = time;
$winner = "$w_id<>$w_teamname<>$w_owner<>$w_icon<>$w_rensho<>$w_cup<>$before<>$w_host<>$host<>$times<>\n"; #$hostと$times(試合を行った時間)を追加game.pl修正
#
#
# チームデータ準備 #
#
#
sub set_data {if ( "$w_id" eq "$h_id" ){ &error("現在優勝者のため戦えません。"); }
#追加( #同hostの挑戦者が10分以内に連続で試合をするのを禁止)
if("$l_host" eq "$host" && $times < $play_time + 600){ $nexttimes = int(($date + $play_time + 600 - $times) / 60) + 1; &error("次の試合まであと$nexttimes分くらい待っててね。"); }以上で連続試合を短時間で行うのが面倒になるので荒らし難くなります。
あれです、掲示板の連続投稿を防ぐのと同じ考えです。ただコレだとちょっと弱くね?と知人に指摘されてしまったので5試合分くらいチェックする方法。
同ホストによる当て馬防止 その2(強化版)
sgsoccer.pl修正
#
- ---#
# スプリット #
#
- ---#
sub split {if ( $_[0] eq "teamdata" ){
($id,$password,$owner,$teamname,$sys,$tac,$tac2,$fk,$pk,$icon,$date,$win,$lose,$draw,$win_p,$winmax,$sotokuten,$soshiten,$cup,$ip) = split(/<>/,$_[1]);}elsif ( $_[0] eq "playersdata" ){
($shozoku[$i],$p_name[$i],$posi[$i],$pass[$i],$dori[$i],$shoo[$i],$defe[$i],$style[$i],$fair[$i],$score[$i],$hyoka[$i],$cond[$i]) = split(/<>/,$_[1]);}elsif ( $_[0] eq "playerdata" ){
($shozoku,$p_name,$posi,$pass,$dori,$shoo,$defe,$style,$fair,$score,$hyoka,$cond) = split(/<>/,$_[1]);}elsif ( $_[0] eq "winnerdata" ){
#修正
($w_id,$w_teamname,$w_owner,$w_icon,$w_rensho,$w_cup,$before,$w_host,$a_host1,$play_time1,$a_host2,$play_time2,$a_host3,$play_time3,$a_host4,$play_time4,$a_host5,$play_time5) = split(/<>/,$_[1]); #この行を修正}elsif ( $_[0] eq "rekidai" ){
($re_date,$re_dai,$owner,$teamname,$icon,$win,$lose,$draw,$win_p,$winmax,$sotokuten,$soshiten,$s_shozoku,$s_p_name,$s_posi,$s_score,$s_hyoka,$h_shozoku,$h_p_name,$h_posi,$h_score,$h_hyoka,$shozoku_gk,$p_name_gk,$score_gk,$hyoka_gk,$shozoku_df,$p_name_df,$score_df,$hyoka_df,$shozoku_dmf,$p_name_dmf,$score_dmf,$hyoka_dmf,$shozoku_omf,$p_name_omf,$score_omf,$hyoka_omf,$shozoku_fw,$p_name_fw,$score_fw,$hyoka_fw) = split(/<>/,$_[1]);}elsif ( $_[0] eq "kekka" ){
($log_no,$log_date,$log_card,$log_result,$log_cmt) = split(/<>/,$_[1]);}
}#END split
sgsoccer.cgi修正
#
- ---#
# 試合後処理 #
#
- ---#
sub save_data {# 優勝者ファイル書き込み
#修正
$times = time;
$winner = "$w_id<>$w_teamname<>$w_owner<>$w_icon<>$w_rensho<>$w_cup<>$before<>$w_host<>$host<>$times<>$a_host1<>$play_time1<>$a_host2<>$play_time2<>$a_host3<>$play_time3<>$a_host4<>$play_time4<>\n"; #この行を修正game.pl修正
#
#
# チームデータ準備 #
#
#
sub set_data {if ( "$w_id" eq "$h_id" ){ &error("現在優勝者のため戦えません。"); }
#追加( #同hostの挑戦者が10分以内に連続で試合をするのを禁止)
if("$a_host1" eq "$host" && $times < $play_time1 + 600 ){ $nexttimes = int(($date + $play_time1 + 600 - $times) / 60) + 1; &error("次の試合まであと$nexttimes分くらい待っててね。"); }
if("$a_host2" eq "$host" && $times < $play_time2 + 600 ){ $nexttimes = int(($date + $play_time2 + 600 - $times) / 60) + 1; &error("次の試合まであと$nexttimes分くらい待っててね。"); }
if("$a_host3" eq "$host" && $times < $play_time3 + 600 ){ $nexttimes = int(($date + $play_time3 + 600 - $times) / 60) + 1; &error("次の試合まであと$nexttimes分くらい待っててね。"); }
if("$a_host4" eq "$host" && $times < $play_time4 + 600 ){ $nexttimes = int(($date + $play_time4 + 600 - $times) / 60) + 1; &error("次の試合まであと$nexttimes分くらい待っててね。"); }
if("$a_host5" eq "$host" && $times < $play_time5 + 600 ){ $nexttimes = int(($date + $play_time5 + 600 - $times) / 60) + 1; &error("次の試合まであと$nexttimes分くらい待っててね。"); }上記の1か2で修正してあと一つ、肝心なファイルを修正しないといけないのです。
不正パラメータによる試合の防止
game.pl修正
#
#
# チームデータ準備 #
#
#
sub set_data {#フォームデータ修正
@p_name = @h_name = ($form{'name1'},$form{'name2'},$form{'name3'},$form{'name4'},$form{'name5'},$form{'name6'},$form{'name7'},$form{'name8'},$form{'name9'},$form{'name10'},$form{'name11'});
@posi = @h_posi = ($form{'posi1'},$form{'posi2'},$form{'posi3'},$form{'posi4'},$form{'posi5'},$form{'posi6'},$form{'posi7'},$form{'posi8'},$form{'posi9'},$form{'posi10'},$form{'posi11'});
@para1 = @h_pass = ($form{'pass1'},$form{'pass2'},$form{'pass3'},$form{'pass4'},$form{'pass5'},$form{'pass6'},$form{'pass7'},$form{'pass8'},$form{'pass9'},$form{'pass10'},$form{'pass11'});
@para2 = @h_dori = ($form{'dori1'},$form{'dori2'},$form{'dori3'},$form{'dori4'},$form{'dori5'},$form{'dori6'},$form{'dori7'},$form{'dori8'},$form{'dori9'},$form{'dori10'},$form{'dori11'});
@para3 = @h_shoo = ($form{'shoo1'},$form{'shoo2'},$form{'shoo3'},$form{'shoo4'},$form{'shoo5'},$form{'shoo6'},$form{'shoo7'},$form{'shoo8'},$form{'shoo9'},$form{'shoo10'},$form{'shoo11'});
@para4 = @h_defe = ($form{'defe1'},$form{'defe2'},$form{'defe3'},$form{'defe4'},$form{'defe5'},$form{'defe6'},$form{'defe7'},$form{'defe8'},$form{'defe9'},$form{'defe10'},$form{'defe11'});
@style = @h_style = ($form{'style1'},$form{'style2'},$form{'style3'},$form{'style4'},$form{'style5'},$form{'style6'},$form{'style7'},$form{'style8'},$form{'style9'},$form{'style10'},$form{'style11'});
@fair = @h_fair = ($form{'fair1'},$form{'fair2'},$form{'fair3'},$form{'fair4'},$form{'fair5'},$form{'fair6'},$form{'fair7'},$form{'fair8'},$form{'fair9'},$form{'fair10'},$form{'fair11'});$h_sys = $form{'sys'};
$h_tac = $form{'tac'};
$h_tac2 = $form{'tac2'};
$h_fk = $form{'fk'};
$h_pk = $form{'pk'};#追加
&chara_para;
@p_name = @posi = @para1 = @para2 = @para3 = @para4 = @style = @fair = ();#変数クリアこれが一番単純で簡単な方法かな・・・
もし設置してる人がいたら以上の箇所を修正したり追加して下さい。
(本家スクリプトが配布されて無かったから行番号わからなかった・涙)
ほのぼのとしてた時代の古いスクリプトなのでこういった穴が残ってるんですよね。一応不正アクセス禁止法ってあるから、こういう穴を見つけたからって自慢気に荒らして他の人に迷惑をかけて・・・
サイトの管理者さんが間違って被害届を出したりしちゃうと、こんなゲームでも犯罪になっちゃうのかもよ?この程度で被害届けを出す管理人さんは殆どいないと思うけど。メンドーだし(笑)
いずれにせよ荒らしは痛い子になるだけだから止めましょう♪
- この記事のURL
- コメント(0)
- トラックバック(0)
- ツイート
- by scofield in Amazonアソシエイト