Estoy experimentando con aplicaciones de seguridad, criptografía y web. Mi objetivo es crear un sistema de inicio de sesión simple que sea realmente lo suficientemente seguro . Me gustaría compartir mi enfoque para mantener una sesión autenticada con usted para obtener algunos comentarios.
Mi enfoque:
Cuando el usuario inicia sesión (uso BCrypt y password_verify):
session_regenerate_id(TRUE);
$_SESSION['session_token'] = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
$app->setCookie('auth', hash_hmac("sha256", $_SESSION['session_token'].$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'], SESSION_SECRET));
$app->redirect($app->urlFor('index'));
Todas las cookies están cifradas con MCRYPT_RIJNDAEL_192 en modo CBC (Slim Framework se encarga de ello).
Luego, en cada solicitud, realizo esas comprobaciones:
$token = $app->getCookie('auth');
if(!$token
|| !isset($_SESSION['session_token'])
|| hash_hmac("sha256", $_SESSION['session_token'].$_SERVER['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT'], SESSION_SECRET) !== $token
) {
// user not logged in
}
SESSION_SECRET
es mi cadena de const aleatoria definida.
Y aquí está mi función de cierre de sesión:
$app->deleteCookie('auth');
session_destroy();
session_unset();
session_start();
session_regenerate_id(TRUE);
¿Es lo suficientemente seguro para mantener al usuario conectado?