Sto sperimentando con sicurezza, crittografia e applicazioni web. Il mio obiettivo è creare un semplice sistema di accesso che sia sufficientemente sicuro . Mi piacerebbe condividere il mio approccio per mantenere la sessione autenticata con te per ottenere alcuni commenti.
Il mio approccio:
Quando l'utente effettua l'accesso (utilizzo BCrypt e 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'));
Tutti i cookie sono crittografati con MCRYPT_RIJNDAEL_192 in modalità CBC (il framework Slim si prende cura di esso).
Quindi, ad ogni richiesta, eseguo quegli assegni:
$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
è la mia stringa const const definita.
Ed ecco la mia funzione di disconnessione:
$app->deleteCookie('auth');
session_destroy();
session_unset();
session_start();
session_regenerate_id(TRUE);
È abbastanza sicuro in materia di mantenere l'accesso dell'utente?