2012-09-03 18 views

Antwort

30

Hängt von session.hash_function und session.hash_bits_per_character ab.

Überprüfen Sie die session_id Seite für weitere Informationen.

Je höher Sie session.hash_bits_per_character die kürzere Ihre Sitzungs_ID eingestellt unter Verwendung von mehr Bits pro Zeichen werden wird. Die möglichen Werte sind 4, 5 oder 6.

Bei Verwendung von SHA-1-Hashing für (durch ini_set Einstellung ('session.hash_function', 1) die folgenden Sitzungs Zeichenfolge Längen durch die Drei-Sitzung hergestellt. hash_bits_per_character Einstellungen:

4-40 Zeichenkette

5-32 Zeichenkette

6-27 Zeichenkette

+0

Also 40 Zeichen ist eine sichere Menge, und wenn ich einige Bytes speichern möchte, muss ich die PHP-Konfiguration überprüfen, nicht wahr? – Gustavo

+0

Überprüfen Sie php.ini, um zu sehen, was die Einstellungen sind. 40 Zeichen sind das Ergebnis der SHA-1-Hash-Funktion und 4 Bits pro Zeichen. Sie können 'echo strlen (session_id());' ausführen, um die Länge zu sehen und Ihr Datenbankfeld entsprechend zu gestalten. – sachleen

+3

Als Referenz ist die Länge der Session-ID 32, wenn Sie die MD5-Hash-Funktion und 4 Hash-Bits pro Zeichen verwenden. Das hat mich heute ein paar Stunden die Haare ausreißen lassen. – sevenseacat

4

Es hängt von diesen Konfigurationseinstellungen: session.hash_function und session.hash_bits_per_character

Kürzere Sitzungs-ID Längen die höhere Wahrscheinlichkeit einer Kollision haben, aber das hängt auch viel auf dem ID-Erzeugungsalgorithmus. Angesichts der Standardeinstellungen sollte die Länge der Sitzungs-ID für die meisten Anwendungen angemessen sein. Bei Implementierungen mit höherer Sicherheit sollten Sie überlegen, wie PHP seine Sitzungs-IDs generiert und überprüft, ob es kryptografisch sicher ist. Wenn dies nicht der Fall ist, sollten Sie Ihren eigenen Algorithmus mit einer kryptografisch sicheren Quelle der Zufälligkeit ausführen.

+3

Die Chance einer Kollision wird durch Hash-Funktion, verwendet Entropie vollständig bestimmt, und das Volumen des Verkehrs. Wenn Sie eine sicherere Hashfunktion verwenden, wird eine größere Sitzungs-ID-Zeichenfolge generiert. Wenn Sie also kürzere Sitzungs-ID-Längen mit höherer Kollisionswahrscheinlichkeit meinen, sind Sie richtig, verkürzen diese Länge jedoch, indem Sie eine höhere Bittiefe pro Zeichen verwenden wird keine Wirkung haben. – Jason

+0

Ist die Sitzungs-ID mit 128 Zeichen für generische Webanwendungen zu umfangreich? – TheFrost

26

@sachleen Antwort ist nicht voll.
Detailliertere Informationen über die Sitzungs-ID-Länge werden beschrieben here.

Zusammenfassung:

128-bit digest (MD5) 
4 bits/char: 32 char SID  
5 bits/char: 26 char SID  
6 bits/char: 22 char SID 

160-bit digest (SHA-1) 
4 bits/char: 40 char SID  
5 bits/char: 32 char SID  
6 bits/char: 27 char SID 

Und Probe regex Session-ID zu überprüfen:

preg_match('/^[a-zA-Z0-9,-]{22,40}$/', $sessionId) 
+1

das war hilfreich für mich !!! – SirJ

+3

Ausgezeichnete Antwort, das fehlende Stück eines Puzzles für mich. –

0

Ich weiß nicht, wo meine Anwendung für dann verwendet werden soll ich es einrichten als: VARCHAR (127) und hoffe, dass es für unknown MySQL-Benutzer toll sein wird.

+1

Wenn Sie mit unbekannt meinen, dass Sie unbekannt sind, können Sie es als TEXT einrichten, das sich nach Bedarf zusammenzieht und erweitert. Andernfalls haben Sie viel freien Speicherplatz in Ihrer Tabelle, und trotzdem kann es mit einem Wert von 128 fehlschlagen . – Gustavo

+0

@GustavoPinent VARCHAR ist schneller als TEXT. –

+0

@TichomirMitkov yep, er wird sich zwischen sicheren und flexiblen TEXT und schnellen VARCHAR entscheiden müssen – Gustavo

0

durch die regelmäßige PHP Einbaulänge ist immer 26 (ExMP: psprdaccghmmre1oo2eg0tnpe6)