Matti Maekitalo: Neuer Artikel Cookies - bitte mal Feedback

Beitrag lesen

use Mosche;

[ Artikel zu Cookies ]

Zu deinem Beitrag zur Session-ID Erstellung:
<cite>
Es gibt verschiedene Möglichkeiten einen eindeutigen String zu erzeugen. Untenstehender PERL Code zeigt wie der String time.$$ (Sekunden seit 1.1.1970 + Prozess ID) mit einem zufälligen salt (Zusatz zur crypt() Funktion) encrypted werden kann, Tests haben ergeben dass es selbst in einem einzigen Prozess damit bei 500 Tausend Versuchen keine Duplicate gibt:
sub initid{
        # salts erzeugen
        my @salts = ("a".."z");
        shuffle(@salts);
        my $salt = join "", @salts;

# und nun crypten
        my $zufall = crypt($salt,time.$$);
        return $zufall;
}
</cite>

Das wundert mich allerdings sehr. Folgendes passiert: du übergibst einen String, der eine Länge von über 10 Zeichen hat (das ist allein die Länge des time()-Strings) an die crypt-Funktion.

Daher sollten eigentlich innerhalb von 100 Sekunden gleiche Strings an crypt übergeben werden, da für crypt nur die ersten 8 Zeichen von Bedeutung sind. Mit ein bißchen ausprobieren (bei a-z (auch sehr klein gewählter Salt) sind das 26*26 Permutationen) kommt man da relativ schnell auf eine gültige SID.

Ersetze crypt besser durch zB MD5,

use Digest::MD5 qw(md5_hex);

my $sid = md5_hex(time.$$.$user_id.$user_name."alles andere was den String zufälliger machen könnte");

Da hast du dann 64 Zeichen lang Zufall, und zum ausprobieren sollte (für eine low-Security Anwendung) das lang genug sein. Deine Variante ist auf jeden Fall zu berechenbar.

use Tschoe qw(Matti);

--
  Anyone who quotes me in their sig is an idiot. -- Rusty Russell.