Thread Session für OnlineGame validieren: mit RegEx :) (4 answers)
Opened by pktm at 2003-10-23 23:41

pktm
 2003-10-23 23:41
#67161 #67161
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hallo!
Ich habe eine Session für ein OnlineGame, die ich im Query-String (CGI) übergeben
Die sieht so aus:
Code: (dl )
print $query->{sid}; # 86674281529017.9XY1066938111XY606719970703125XY0.535980224609375XY1


und wird so gebaut:
Code: (dl )
1
2
# Session erstellen
my $session = ($uid * $uniq) / 7 . 'XY' . time() . 'XY' . $uniq . 'XY' . rand(1) . 'XY' . $uid;

$uid und $uniq werden dabei aus einer Datenbank gelesen und bedeuten so viel wie User-ID und Unique-ID.
$uid besteht aus einer beliebigen Zahl (in der Datenbank als int(255) eingetragen) und $uniq ist eine 14-stellige Zufallszahl aus rand(1), wobei die 0. am Anfang weggelassen wurden.

Jetzt würde ich gerne im nächsten Schritt überprüfen, ob die Session gültig ist.
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub validate_session{
# ---- usage
# if( validate_session( $sessionDataToValidate ) ){ print "Session Ok!\n"; }
# ----
# prüfen, ob gültige sid: a)muster b)haltbarkeit c)valid
# my $session = ($uid * $uniq) / 7 . 'XY' . time() . 'XY' . $uniq . 'XY' . rand(1) . 'XY' . $uid;
   my $session = @_;
   my $return = 0;
   if( $session =~ m/\[d{16}\.]XY\d{10}XY\d{15}\[d{15}\.]XY\d*/ ){ #Muster ok?
       if( (split /XY/, $session)[1] > time() - SESSION_TIME ){ #gültig? (Zeit)
           if( ((split /XY/, $session)[0] * 7) / (split /XY/, $session)[-1] == (split /XY/, $session)[-3] ){ #valid? (user)
               $return = 1;
           }
       }
   }
   return $return;
}


Was ich schon durch auskommentieren der einzelnen Zeilen herausbekommen habe ist, dass in jeder Abfrage ein Fehler steckt - *freu*
So, kann mir wer bei dieser Aufgabe helfen?
mfg pktm

PS: ich habe übrigens extra zur Entwicklung 3 if's gewählt, zusammenfügen kann man es hinterher ja immernoch.
http://www.intergastro-service.de (mein erstes CMS :) )

View full thread Session für OnlineGame validieren: mit RegEx :)