Il rischio principale di una sessione persistente è l'aumento dell'esposizione per eventuali vulnerabilità esistenti sul lato client (ad esempio XSS, CSRF, fissazione della sessione, ecc.)
Cioè, qualsiasi sito maligno che bersaglia i tuoi utenti tramite exploit per quanto sopra sarebbe più probabile che abbia successo perché l'utente è rimasto loggato.
Con remember-me si potrebbe applicare anche il precedente - Dì che il token remember-me a lungo termine viene scambiato automaticamente per un token di sessione per richiesta.
per es.
nella richiesta che il browser invia
Cookie: remember-me=32132213312132
e il server emette automaticamente un token di sessione per questa richiesta perché convalida il token. Inoltre, risponde con il nuovo token di sessione per le richieste successive da utilizzare in questa sessione:
Set-Cookie: session=asdkalkjdjsaddsajdsal
Questo dimostra che, anche se viene utilizzato un cookie separato per l'accesso a lungo termine, poiché viene scambiato automaticamente, esso favorirà anche gli exploit cross-domain nelle sessioni utente di attacco.
Potresti mitigarlo usando i token di aggiornamento stile OAuth2.
Quindi se l'utente malintenzionato tenta un attacco CSRF come
<img src="https://example.com/transfer_money?to_acc=2321321&amount=1000000"/>
nonavrebbeautomaticamentesuccessoperchéiltokendiaggiornamentodasolononèsufficienteperautenticarelarichiesta(remember-me
)-deveesserescambiatoperuntokendiaccesso(session
).
es.sel'utentevisitailtuosito,potrebbeesserciunaltropassaggioesplicitoperottenereiltokensession
perrappresentareunutenteattivoeconnesso:
<formmethod="post">
<input type="hidden" name="anti-csrf" value="asddadaddasa242421fsas" />
</form>
Il token anti-csrf è collegato al token di aggiornamento nel database lato server, impedendo l'utilizzo di un exploit CSRF per ottenere il token prima dell'attacco. Quanto sopra deve essere inviato manualmente dall'utente per impedire a un utente malintenzionato di aprire la pagina in un popup o all'interno di un IFrame.
Solo dopo che tutte le convinzioni precedenti sono riuscite, il server ha risposto con un token di accesso ( session
):
Set-Cookie: session=asdkalkjdjsaddsajdsal
Naturalmente il tuo sito dovrebbe già mitigare XSS, CSRF e simili, tuttavia questo è un approccio difensivo per proteggere i token a lungo termine che hanno una maggiore probabilità di compromettere un utente perché il loro login è più probabile che sia attivo in caso di attacco.