Passwords italiane
Prima la pappa, per tutti, non solo per i programmatori:
Le password che scelgono gli utenti sono sempre scandalosamente inadeguate.
Totti, patty, albero, 654321 e via andare.
Un hacker/cracker se le mangia in un boccone.
Anche quando sono più complesse, spesso una persona usa la stessa password per Windows, la posta elettronica, i forum sui telefilm e il banking online (se il sito glielo permette...).
Cosa può fare allora il gestore?
- O controllare la password prima di accettarla, tipo lunga almeno 6 caratteri, che abbia lettere e numeri, etc. (la password scelta dall'utente sarà inevitabilmente totti2006 o patty01),
- o generare una password casuale (che di solito è tipo dlTR89p01B).
Vorrei dare il mio piccolo contributo a umanizzare la seconda soluzione (con PHP).
La password generate automaticamente hanno due grossi problemi:
- spesso non vengono riconosciute correttamente (dopo la di c'è una elle o un uno? il terzultimo carattere è uno zero o una o maiuscola?),
- soprattutto, non se le ricorderà mai nessuno (e quindi verranno salvate sul computer o messe in belle evidenza in un postit sul monitor).
Aumentando le sillabe o i numeri la password diventa molto più sicura, ma più difficile da ricordare.
Ecco lo script:
function genPass($nSill = 3, $nCifre = 3){Un esempio d'uso:
$elCar = array("bcdfgkmnprstvz","aeiou","123456789");
$pass = "";
for ($n=0; $n<$nSill; $n++){
$pass.=substr($elCar[0],rand(0,(strlen($elCar[0])-1)),1);
$pass.=substr($elCar[1],rand(0,(strlen($elCar[1])-1)),1);
}
for ($n=0; $n<$nCifre; $n++){
$pass.=substr($elCar[2],rand(0,(strlen($elCar[2])-1)),1);
}
return $pass;
}
<input name="passCas" type="text" value="<?php echo genPass(); ?>">
Nota: il solo problema umano è che, anche se piuttosto raramente, possono uscire stringhe che hanno significato nella lingua italiana, tipo morale123; mooolto più raramente, queste stringhe potrebbero essere indesiderabili, tipo culona666; a un utente di un mio cliente è uscito fikate321: o si dà la possibilità di generare un'altra password, o se avete decine migliaia di utenti preparatevi a rispondere ad email roventi.
Un'alternativa sarebbe effettuare un controllo sulla stringa finale ottenuta e, se contiene (o coincide con) una serie di stringhe predefinite, fare una piccola ricorsione e chiamare la funzione da capo.
Evitatemi la pubblicazione di questa modifica, o arriverebbero dai motori di ricerca persone che non stanno cercando esattamente uno script PHP.