He configurado un sistema de inicio de sesión que funciona más o menos así:
1) El usuario ingresa los datos
2) Los datos se hash localmente utilizando SHA256 (para reducir el riesgo de que alguien robe la contraseña a través de un hombre en el ataque central y la use en otro lugar).
3) Los hashes se envían a través de una conexión segura al servidor
4) Una vez que llegan, se revisan de inmediato para asegurarse de que no contienen caracteres no válidos. Esta es la función:
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) Si son caracteres hexadecimales válidos, el proceso de autenticación continúa: los hashes se combinan con una sal de 64 caracteres de forma aleatoria asignada a ese usuario en particular, luego se vuelve a escribir mediante pbkdf2. Por último, este nuevo hash se compara con la única tienda en la base de datos.
Ya que estoy siguiendo el método predeterminado para protegerme contra los ataques de inyección de SQL, escapándome de la entrada, quería preguntar si tal ataque podría llevarse a cabo contra el sistema que he configurado.