Ho impostato un sistema di accesso che funziona più o meno in questo modo:
1) L'utente inserisce i dati
2) I dati vengono sottoposti a hash localmente usando SHA256 (per ridurre il rischio che qualcuno rubi la password attraverso un uomo nell'attacco centrale e lo usi da qualche altra parte).
3) Gli hash vengono inviati su una connessione sicura al server
4) Una volta arrivati, vengono immediatamente controllati per assicurarsi che non contengano caratteri non validi. Questa è la funzione:
function IsHexadecimal($pass){
$allowedChars = '0123456789abcdef';
$passLenght = strlen($pass);
for($i = (int)0; $i < $passLenght; $i++){
if(strpos($allowedChars, $pass[$i]) == false && $allowedChars[0] != $pass[$i]){
return false;
}
}
return true;
}
5) Se sono caratteri esadecimali validi, il processo di autenticazione continua: gli hash vengono combinati con un sale di 64 caratteri generato casualmente assegnato a quell'utente particolare, quindi eseguito di nuovo l'hash con pbkdf2. Infine, questo nuovo hash viene confrontato con quello di un negozio nel database.
Poiché seguo il metodo predefinito per la protezione dagli attacchi SQL injection, evitando l'input, volevo chiedere se un simile attacco potesse essere eseguito contro il sistema che ho configurato.