Při práci se sessions si mezi sebou server a klient neustále vyměňují SID. Jedná se o náhodně vygenerovaný token, podle kterého si server páruje dohromady jednotlivé požadavky konkrétního návštěvníka. Kdo zná SID, ten má přístup i k celé příslušné session.
Nenechte si uhodnout Session ID
[1] Samotné uniqid() použít nelze, protože porušuje některé výše uvedené principy, zejména princip neodvoditelnosti, protože generuje lineární řadu. Je tedy nutné ho převést do nějaké nelineární podoby. Pro tento účel jsou jednocestné funkce ideální, protože výsledné tokeny nelze převést zpět na původní lineární řadu.
A proč zrovna md5? Proč ne? Její oslabená bezkoliznost zde vůbec ničemu nevadí, takže je pro daný účel stejně dobrá jako jakákoliv jiná hashovací funkce. Lze samozřejmě podle libosti použít i jinou funkci, například SHA1.
[1] K identifikátoru trvalého přihlášení – pro evidenci trvalého přihlášení osobně používám úplně jinou speciální trvalou cookie, protože vazbu mezi ní a daným uživatelem si eviduji zvlášť a ne v sessions. Je to praktické a systémovější. Jinak jsem ale v závěrečné části článku psal o tokenech obecně, takže tam session_id() použít nejde.
Splňuje mt_rand tyto požadavky? Já jsem se kdysi bezpečným generováním tokenu zabýval. Ještě jsem neznal mt_rand, tak jsem použil zpožděnou náhodu. (Tabulka v DB, ze které náhodně vyberu řádek a následně jej pak změním) Ale dokonalé to asi nebylo, protože útočník může udělat dostatečné množství požadavků, čímž nechá v krátkém čase vygenerovat zcela novou tabulku.
Zdroj: Phpguru.cz