RNG debole: token prevedibili
Token di sessione, reset password, CSRF, API key: tutti devono essere imprevedibili. Un PRNG non crittografico (rand(), mt_rand(), Math.random()) è predicibile dopo pochi output.
Il problema
mt_rand() ha uno stato ricostruibile; se il seed deriva dal tempo (srand(time())), lo spazio è minuscolo. Un token di reset così si forza offline.
// SBAGLIATO
$token = md5(uniqid(rand(), true));
// GIUSTO
$token = bin2hex(random_bytes(32));Difesa
Usa un CSPRNG: random_bytes (PHP), secrets (Python), crypto.randomBytes (Node), /dev/urandom. Almeno 128 bit di entropia. Confronta i token in tempo costante e falli scadere.