Mi inquietud es la siguiente:
En los sitios que he creado usando PHP, he llegado a poner páginas que para acceder a ellas es necesario identificarse.
Cuando el usuario se registra, creo una sal. Después a la contraseña con md5, junto con el usuario y la sal les paso sha1 y luego md5 y esa cadena la guardo en la base de datos junto con el nombre de usuario y su sal. Es decir, algo así:
Código PHP:
// $Usuario y $Pass se obtienen de lo que el usuario introduce.
// $Sal es una cadena de caracteres aleatorios.
$Hash = md5(sha1($Usuario.md5($Pass).$Sal));
mysql_query( "INSERT INTO BaseDatos (Usuario,Hash,Sal) VALUES ('$Usuario','$Hash','$Sal') " ) ;
Código PHP:
// $Usuario y $Pass se obtienen de lo que el usuario introduce.
$Q = mysql_query("SELECT * FROM BaseDatos WHERE Usuario = '$Usuario'");
$Sal = mysql_result($Q,0,'Sal');
$BDHash = mysql_result($Q,0,'Hash');
$LocalHash = md5(sha1($Usuario.md5($Pass).$Sal));
if($BDHash == $LocalHash)
{
session_start();
$_SESSION['Usuario']=$Usuario;
$_SESSION['Pass']=md5($Pass);
echo 'Sesión iniciada';
}
else
{
echo 'Datos incorrectos. Vuelve a intentarlo.';
}
Código PHP:
session_start();
$Usuario = $_SESSION['Usuario'];
$Pass = $_SESSION['Pass']; // Aquí el pass ya tiene md5
$Q = mysql_query("SELECT * FROM BaseDatos WHERE Usuario = '$Usuario'");
$Sal = mysql_result($Q,0,'Sal');
$BDHash = mysql_result($Q,0,'Hash');
$LocalHash = md5(sha1($Usuario.$Pass.$Sal)); // El pass ya tiene md5
if($BDHash == $LocalHash)
{
//Se muestra la página
}
else
{
header( 'Location: ../iniciarsesion.php' ) ;
}
Espero haberme explicado en cómo hago la identificación.
Mis preguntas son las siguientes:
¿Qué tan segura es la autentificación que uso?
Hago esa pregunta porque todo el sistema confía en que un header bote de la página al visitante.
Si el header llegara a fallar, entonces la página se mostraría.
¿De qué extensión recomiendan debería ser la Sal?
Por ahí leí que la sal ayuda mucho y no sé qué tantas cosas. Que la sal debe ser distinta para cada usuario y que esta debe ser larga... pero ¿Qué tan larga?
Bueno, eso es todo por ahora. Si el sistema que uso resulta ser muy seguro, siéntanse libres de implementarlo en sus web, si no lo es, ayúdenme a mejorarlo, después de todo, esto es para mejorar.
Muchas gracias por leer.