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).
Lo script che segue, in PHP (ma portabile con pochissime modifiche in Javascript -vedi sorgente- e in altri linguaggi), genera una password con sillabe (default=3) e numeri (default=3) facilmente ricordabile e abbastanza sicura: le combinazioni possibili "pure" sono circa 250 milioni (ammesso che chi la sta cercando sappia il meccanismo di generazione, altrimenti lo spazio di ricerca possibile è moolto più ampio); aggiungendo ad esempio lo zero nelle cifre e la elle nelle consonanti, le combinazioni diventano circa 420 milioni.

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){
$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;
}
Un esempio d'uso:

<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.

 

Trackbacks

    Nessun Trackbacks

Commenti

Mostra commenti (Cronologicamente | Per argomento)

    Nessun commento


Aggiungi Commento


Puoi scrivere in grassetto usando due asterischi (*testo in bold*), e sottolineare con due underscore (_testo sottolineato_).
Le emoticons qui sotto sono convertite in immagini.
:'(   :-)   :|   :-O   :-(   8-)   :-D   :-P   ;-)

Per evitare spam e inserimenti da parte di script, devi reinserire i caratteri che vedi nell'immagine qui sotto (richiede l'abilitazione dei cookies).
CAPTCHA 1CAPTCHA 2CAPTCHA 3CAPTCHA 4CAPTCHA 5