L'ID sessione generato dopo l'accesso deve essere contrassegnato come non valido quando l'utente chiude il browser senza disconnettersi?
Questo potrebbe essere un difetto di sicurezza? Se sì, è possibile sfruttarlo?
I browser normalmente non ascoltano alcuna porta, quindi non ci sono porte a cui inviare SYN-ACK. Il browser è spesso anche dietro un NAT, quindi non è possibile raggiungere alcuna porta sul computer su cui è in esecuzione il browser, tranne quando si risponde alle richieste. Avere una richiesta AJAX aperta o l'utilizzo di socket Web è ovviamente possibile ma sarà costoso nei requisiti del server.
I browser eliminano i cookie di sessione quando il browser è chiuso, se lo chiudi normalmente e non solo uccide il processo, quindi la sessione viene definitivamente persa dal lato client quando il browser viene chiuso.
L'opzione normale è impostare un tempo di sessione relativamente breve affinché il server chiuda la sessione quando non ci sono attività sul client. Puoi anche impostarlo veramente breve se javascript è abilitato e inviare una richiesta keep-alive per mantenere la sessione aperta fino a quando il sito è aperto nel browser.
Ci sono altri mezzi che potresti usare per proteggere le sessioni stantie, il più semplice è avere un listener onBeforeUnload per inviare una richiesta di logout quando il visitatore lascia il tuo sito, questo ovviamente richiede anche che javascript sia abilitato nel browser . Un'altra cosa che potresti fare è tenere traccia di IP e delle impronte digitali dal browser e collegarlo alla sessione in modo da poter verificare se il browser che ha il sessionId non cambia.
Se disponi di un sito con requisiti di sicurezza sufficientemente elevati da doverti preoccupare di questo, dovresti essere più preoccupato di ciò che accade quando l'utente si allontana dal sito o chiude la scheda e lascia aperto il browser
Sì, mantenere la sessione valida dopo che l'utente chiude il browser è un rischio minore. Si desidera mantenere il tempo in cui un token di sessione è valido al minimo. Dopo che l'utente ha chiuso il browser, sicuramente non lo userà più, quindi non ha senso mantenerlo valido.
Il problema è che non ricevi una notifica quando un utente chiude il suo browser. Un'alternativa è quella di rilevare se l'utente utilizza ancora la tua applicazione. L'applicazione può esaminare l'intervallo di tempo tra le richieste e, se non c'è stata una richiesta tra 10 o 20 minuti, si può presumere che l'utente abbia terminato la sessione e che il token di sessione possa essere invalidato.
Tuttavia, ciò significa che l'utente viene disconnesso quando ha la tua applicazione aperta ma non effettua richieste. Per risolvere questo problema, l'applicazione può inviare richieste quando è in uso. Con Javascript il client può inviare una richiesta ogni minuto o così facendo sapere al server che l'applicazione è ancora in uso. In questo modo la sessione rimane valida fino a quando l'applicazione web viene aperta nel browser.
Leggi altre domande sui tag session-management