2012-09-03 16 views

Odpowiedz

30

Zależy od session.hash_function i session.hash_bits_per_character.

Sprawdź stronę session_id, aby uzyskać więcej informacji.

Im wyższe ustawienie session.hash_bits_per_character krótszego swojej session_id staną się za pomocą większej liczby bitów na znak. Możliwe są wartości 4, 5 lub 6.

Przy użyciu SHA-1 mieszania (przez ustawienie session.hash_function ini_set ('', 1) w następujący ciąg sesji odcinki są wytwarzane przez sesję trzy. hash_bits_per_character ustawienia:

4 - 40 ciąg znaków

5 - 32 ciąg znaków

6 - 27 ciąg znaków

+0

Tak więc 40 znaków to bezpieczny zestaw, a jeśli chcę zapisać kilka bajtów, muszę sprawdzić konfigurację php, prawda? – Gustavo

+0

Sprawdź php.ini, aby zobaczyć, jakie są ustawienia. 40 znaków jest wynikiem funkcji skrótu SHA-1 i 4 bitów na znak. Możesz zrobić "echo strlen (session_id());", aby zobaczyć długość i odpowiednio ustawić swoje pole bazy danych. – sachleen

+3

Dla odniesienia, długość session_id będzie również 32, jeśli używasz funkcji mieszania MD5 i 4 bity haszowania na znak. To sprawiło, że dzisiaj wydzierałem włosy na kilka godzin. – sevenseacat

4

To zależy od tych ustawień konfiguracyjnych: session.hash_function i session.hash_bits_per_character

krótszych identyfikator sesji mają większą szansę kolizji, ale to też zależy wiele od algorytmu generacji ID. Biorąc pod uwagę ustawienia domyślne, długość identyfikatora sesji powinna być odpowiednia dla większości aplikacji. W przypadku implementacji o wyższym poziomie bezpieczeństwa można rozważyć, w jaki sposób PHP generuje identyfikatory sesji i sprawdzić, czy jest ona bezpieczna kryptograficznie. Jeśli tak nie jest, powinieneś przetasować własny algorytm z kryptograficznie bezpiecznym źródłem losowości.

+3

Prawdopodobieństwo kolizji jest całkowicie zależy od funkcji mieszającej, entropii używane i natężenia ruchu. Korzystanie z bezpieczniejszej funkcji mieszania spowoduje utworzenie większego ciągu identyfikacyjnego sesji, więc jeśli masz na myśli krótsze długości identyfikatorów sesji o wyższej szansie na kolizję, to masz rację, ale skróć tę długość, używając większej głębi bitowej na znak nie przyniesie efektu. – Jason

+0

Czy sesja o długości 128 znaków jest przesadą dla ogólnej aplikacji internetowej? – TheFrost

26

@ Odpowiedź brzmiąca nie jest pełna.
Bardziej szczegółowe informacje dotyczące długości identyfikatora sesji są opisane here.

Podsumowanie:

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 

i próbki regex aby sprawdzić identyfikator sesji:

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

to było dla mnie pomocne !!! – SirJ

+3

Doskonała odpowiedź, brakujący element układanki dla mnie. –

0

nie wiem gdzie jest moja aplikacja będzie używany następnie ustawić go jako: VARCHAR (127) i mam nadzieję, że będzie świetny dla nie znanych użytkowników MySQL.

+1

Jeśli przez nieznany rozumiesz nieznany, możesz rozważyć ustawienie jako TEKST, który się skurczy i rozwinie w razie potrzeby, w przeciwnym razie będziesz mieć dużo pustego miejsca w tabeli, a nawet może się to nie udać z wartością długości 128 . – Gustavo

+0

@GustavoPinent VARCHAR jest szybszy niż TEKST. –

+0

@TichomirMitkov yep, będzie musiał zdecydować pomiędzy bezpiecznym i elastycznym tekstem a szybkim VARCHAR – Gustavo

0

Dzięki regularnej długości instalacji php jest zawsze 26 (exmp: psprdaccghmmre1oo2eg0tnpe6)

Powiązane problemy