Decidere se l'utente ha lasciato il sito senza disconnettersi o ha semplicemente lasciato il sito aperto per le notifiche senza effettivamente svolgere alcun lavoro?

4

Sto sviluppando il mio sito usando sessioni lato server usando redis come backend per salvare la sessione.

Ora il problema che mi dà fastidio è che l'utente lascia il sito Web senza disconnettersi. Voglio dire, l'utente chiude semplicemente il browser che causa la cancellazione del cookie.

Ora la sessione dell'utente è ancora presente sul server e non verrà più utilizzata poiché il nuovo accesso richiede la creazione di una nuova sessione a causa di motivi di sicurezza. Per evitare il caso in cui l'hacker ruba il vecchio cookie e lo usa dopo aver effettuato nuovamente l'accesso con lo stesso vecchio ID di sessione.

In pratica, l'utente lascia il sito Web senza effettuare esplicitamente il logout e la sua sessione verrà cancellata dopo un certo limite di tempo di inaccessibilità. Sto pensando a un limite di tempo di 30-60 minuti. Inoltre, con ogni nuova richiesta da parte dell'utente, il suo cookie verrà aggiornato anche per tenere traccia di quando l'utente ha effettuato l'ultima visita al sito.

Ma al giorno d'oggi, le persone lasciano che il sito rimanga aperto per lungo tempo senza accedervi. Ad esempio, gli utenti aprono Facebook e Gmail in nuove schede e si dimenticano di loro per 2-3 ore e ancora non gli viene chiesto di effettuare nuovamente il login.

L'accesso a una sessione di 2-3 ore fa è sicuro? La mia preoccupazione è che qualcuno rubi il cookie dell'utente e lo usi 2-3 ore dopo.

Pensare a questo argomento mi ha anche costretto a chiedermi come Facebook gestisca la sicurezza se l'utente può utilizzare una sessione in cui non la accede per lunghi periodi di tempo e continua a rimanere loggato. O non è sicuro per me mantenere il login quando non accedo alla sessione del sito per un periodo di tempo più lungo?

Può anche darsi che ci sia un meccanismo di ping usando i siti che tengono traccia degli utenti che hanno il loro sito aperto in un browser e quando il browser si chiude vengono avvisati e possono lavorare di conseguenza.

Il mio sito web è un social network e necessita di tutte quelle funzionalità di sicurezza e di utilizzo di cui un social network potrebbe aver bisogno.

Sono nuovo alla sicurezza web e allo sviluppo web in generale e potrebbe essere il caso in cui le mie precedenti domande potrebbero sembrare un po 'di base. Se ritieni che sia il caso, indica gentilmente un buon riferimento dove posso leggere e trovare le risposte alla mia domanda.

    
posta codecool 05.03.2012 - 12:57
fonte

3 risposte

2

Sì, per la maggior parte dei siti va bene lasciare una sessione valida per ore (per esempio, 24 ore).

Come per qualsiasi domanda di sicurezza, si inizia chiedendo: quali risorse sto cercando di proteggere? Qual è il modello di minaccia? Di cosa sto cercando di difendermi?

In questo caso, sei preoccupato che un utente malintenzionato possa "rubare" un cookie di sessione. Quindi la prossima domanda che dovresti porci è: come può un utente malintenzionato rubare un cookie di sessione e in che modo i limiti sulla durata della sessione influiscono sul rischio?

Un modo in cui un utente malintenzionato può rubare un cookie di sessione è se l'utente sta effettuando l'accesso da un computer condiviso (ad es. in un cybercafe o in una libreria o solo in un computer condiviso con i coinquilini). In tal caso, se l'utente non si disconnette dal tuo sito e lascia il browser attivo e funzionante, l'autore dell'attacco deve semplicemente sedersi davanti al computer e iniziare a utilizzare il browser. La durata della sessione influisce sull'ambito del rischio e sulla finestra temporale della vulnerabilità. Se scade una sessione 1 ora dopo l'ultima attività, un utente malintenzionato dovrebbe sedersi davanti alla macchina dell'utente entro 1 ora dopo che l'utente ha smesso di utilizzare il sito. Se si scade una sessione 24 ore dopo l'ultima attività, l'utente malintenzionato ha 24 ore. Nel complesso, ritengo che questo rischio sia relativamente modesto: speriamo che gli utenti di un cybercafe chiudano il browser, e si spera che le persone che vivono in alloggi condivisi possano fidarsi dei loro coinquilini almeno in una certa misura (altrimenti hanno problemi più grandi).

Un altro modo in cui un utente malintenzionato può rubare un cookie di sessione è di intercettare un cookie mentre viene trasmesso in chiaro, ad esempio su HTTP mentre l'utente è connesso tramite una rete wireless. Qui i tempi di scadenza della sessione non influiscono sul rischio. Il modo migliore per difendersi da questa minaccia è utilizzare HTTPS in tutto il sito e impostare il flag secure su tutti i cookie.

Un terzo modo in cui un utente malintenzionato può rubare un cookie di sessione è piantare malware o spyware sul computer dell'utente inadeguato. Ma se un utente malintenzionato riesce a farlo, tu sei totalmente sicuro, e i limiti di inattività della sessione non ti salveranno da cose brutte che accadono. Quindi questo non dovrebbe influenzare i tuoi limiti di inattività, neanche.

In conclusione: per la maggior parte dei siti Web, una durata della sessione di 24 ore (o almeno alcune ore) dovrebbe andare bene. Per i siti Web in cui ci si aspetta che gli utenti rimangano connessi, come Facebook, è possibile consentire una durata della sessione molto più lunga. Per i siti critici per la sicurezza o la privacy, come l'online banking o l'accesso a cartelle cliniche sensibili, suggerirei un timer molto inattivo: forse 15 minuti.

P.S. È possibile tenere traccia di quando un utente chiude una scheda, utilizzando Javascript, ma non sono sicuro che ciò comporterà una differenza di sicurezza abbastanza grande da valere. Il rischio per la sicurezza non è troppo diverso nel caso in cui l'utente abbia lasciato il tuo sito aperto in qualche altra scheda e dimenticato su di esso rispetto a dove l'utente ha chiuso il tuo sito ma ha lasciato aperto il browser. Un modo più semplice per gestire questo è semplicemente che il server tiene traccia dell'ultima volta in cui ha ricevuto una richiesta HTTP in questa sessione e una volta che una scadenza (ad esempio, 24 ore) passa senza attività (cioè nessuna richiesta HTTP), il server cancella la sessione.

    
risposta data 05.03.2012 - 19:54
fonte
2

È un compromesso tra usabilità e sicurezza. Internet banking chiuderà la connessione dopo un brevissimo periodo di inattività e i siti che hai citato (gmail, facebook, ecc.) Non si disconnetteranno perché i loro utenti sarebbero sconvolti per accedere ogni volta.

La tua decisione sarà molto più basata su questa sicurezza che renderà gli utenti infelici.

Tecnologia a riguardo: non sono sicuro che un javascript possa catturare tutti i movimenti che l'utente fa sul suo computer, anche se fuori dalla tua pagina web.

    
risposta data 05.03.2012 - 14:41
fonte
0

Puoi fare ciò che fanno Google, Facebook, ecc. (e il motivo per cui le persone mantengono aperta la pagina): aggiungi una specie di widget che aggiorna usando AJAX.

Se la pagina è stata lasciata aperta, il widget AJAX verrà eseguito e farà una richiesta a intervalli, mantenendo la sessione corrente.

Se l'utente si è disconnesso, la sessione inizia con l'invecchiamento e può essere eliminata dopo un po 'di tempo. In teoria, dopo due volte l'intervallo del widget è scaduto, il browser dovrebbe essere certificabile morto: se fosse vivo, il widget avrebbe chiamato home (ma l'utente potrebbe voler riaprire il browser, o forse lo ha riavviato per gli aggiornamenti, o potrebbe aver subito una temporanea perdita di connettività (soprattutto se mobile), quindi abbreviare i tempi di raccolta dei dati inutili a tuo rischio e pericolo.

Ovviamente questo non può risolvere lo scenario in cui l'utente dimentica la pagina aperta . In questo scenario il widget è in realtà controproducente perché manterrà la sessione viva e calda per qualsiasi passante da utilizzare a proprio piacimento. Avrai bisogno di una sorta di politica di inattività in aggiunta all'invecchiamento della sessione e dovrai comunicarlo ai tuoi utenti.

Ci sono modi per rilevare l'attività dell'utente, ma nessuno completamente affidabile. Manterrei le cose semplici: se la sicurezza è fondamentale allora nessun widget e inattività scadono. Se l'usabilità è fondamentale, passa al widget e aggiungi eventualmente un "logout inattivo" per chiudere la sessione se non è stata rilevata nessuna altra attività tranne il widget in un ragionevole .

    
risposta data 16.01.2015 - 00:33
fonte

Leggi altre domande sui tag