(Por cierto, todo esto está codificado en PHP, estoy seguro de que lo sabrás a partir de la siguiente función)
Al guardar contraseñas, soy consciente de que tiene que cifrar sus contraseñas, de hecho, aquí está mi código (dígame si es lo suficientemente seguro):
function hash($password)
{
return password_hash($password, PASSWORD_BCRYPT, array(
'cost' => 12,
'salt' => bin2hex(openssl_random_pseudo_bytes(16))
));
}
Sin embargo, mi pregunta real es si estoy usando un sistema de inicio de sesión adecuado o no. En el siguiente párrafo, explicaré cómo funciona mi sistema actual y si alguien puede decirme si está bien o si necesita cambiarlo. He oído que la forma correcta en que se supone que debe hacerlo es con un token que el cliente guarda en las cookies o algo así.
Cuando el usuario llega por primera vez al sitio y su cuenta está registrada, se le solicita que inicie sesión. Con la contraseña que me proporcionaron, la coloco y verifico si coincide, con password_verify (), la contraseña en la base de datos. Una vez validados, tienen la información de inicio de sesión correcta y puedo continuar y autorizarlos. Establecí en $ _SESSION el nombre de usuario y la contraseña (que entiendo que están almacenados en el lado del servidor), y si han marcado el botón Recordarme, guardo el nombre de usuario y la contraseña (sin romper) en las cookies que caducan en 1 semana.
Cada vez que intentan realizar una nueva acción, por ejemplo, cargar una página como información de cuenta, ejecuta una función en la parte superior del código que devuelve si están autenticados o no, para verificar si están autenticados o no, comprueba $ _SESSION para el nombre de usuario y la contraseña y los autentica nuevamente. Si han marcado me recuerdan y la $ _SESSION ha caducado, toma el nombre de usuario y la contraseña de allí.
Mi preocupación es que estoy seguro de que la mayoría de los sitios web utilizan un sistema de token, de modo que cuando inicia sesión guarda un token en sus cookies y luego, en lugar de iniciar sesión cada vez, usa el token. Y también en los foros, por ejemplo, puedes verificar quién está en línea mientras que con el mío, no puedes.
¿Puede alguien responder si lo que he hecho es correcto, o debe cambiarse, o no es lo mejor pero técnicamente es seguro? Estoy seguro de que la parte de la sesión es segura y aún más segura que algunos videos que he visto; algunos dicen que puedes almacenar la ID del usuario en la sesión, lo que significa que si cambian su contraseña, todavía están registrados. Pero la parte de las cookies, me está disparando con el miedo a robarlas, guardándolas en sus cookies.