Ciao,
sha1 ed md5 non sono considerati abbastanza sicuri.
Infatti, è possibile risalire alla password originale utilizzando la cosiddetta "forza bruta". È vero che se utilizzi più volte le due funzioni, magari alternandole, i potenziali hackers dovranno anche trovare la giusta combinazione, ma io ti consiglierei di utilizzare anche
password_hash e/o
crypt().
Ecco un esempio di implementazione.
PHP:
<?php
function hasha($passwordoriginale){
$crypt = md5(sha1(md5(md5(sha1($passwordoriginale)))));
$caratteri_disponibili ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
$lunghezza= 22;
$salt = "";
for($i = 0; $i<$lunghezza; $i++){
$salt = $salt.substr($caratteri_disponibili,rand(0,strlen($caratteri_disponibili)-1),1);
}
$newsalt= '$2a$07$'.$salt.'$';
$hashed_password = crypt($crypt,$newsalt);
return $hashed_password;
}
$passworddacrittare = "password";
$passwordcrittata = hasha($passworddacrittare);
?>
Demo
Per il confronto, utilizzerei
hash_equals, oppure, se usi una versione di php precedente alla 5.6,
PHP:
if(crypt($passworddacrittare, $passwordcrittata) == $passwordcrittata){echo 'Le password coincidono';}
else{echo 'Le password non coincidono';}
Inoltre, dovresti anche impedire agli utenti di scegliere password poco sicure in fase di registrazione. Ad esempio, potresti stabilire questi criteri:
-Più lunga di 8 caratteri;
-Contenente almeno una lettera minuscola, un numero ed una lettera maiuscola;
-Non contenente il nome utente/l'indirizzo email/altre informazioni salvate in fase di registrazione;
-Non contenente la parola "password";
Infine, ti consiglio di impostare alcuni controlli per evitare che vengano utilizzati sistemi automatici per scoprire la password:
-Se in fase di login viene inserita una password errata per 3 volte, richiedi di riportare un codice captcha (puoi usare
recaptcha), oppure un'altro metodo verifica simile (ne esistono diversi, tutti basati su azioni che i bot non possono compiere, ma gli umani sì).
-Se in fase di login viene inserita una password errata per 10 volte, blocca l'accesso al dispositivo (utilizzando i cookies) per 5 minuti, facendo ricominciare il timer se la pagina viene aggiornata.
-Se vengono effettuati 10 tentativi di accesso falliti per un utente specifico, blocca l'accesso (per ogni terminale) all'account dell'utente per alcuni minuti.