Quanto dovrebbe durare il timeout assoluto della sessione?

10

Il foglio Cheat di OWASP Session Management ( link ) consiglia di implementare un timeout di sessione assoluto (oltre alla sessione inattiva tempo scaduto). Significa che l'applicazione obbliga l'utente a eseguire nuovamente l'autenticazione indipendentemente dall'attività della sessione.

Ci sono raccomandazioni per la durata di quel timeout per essere abbastanza sicuro e non infastidire gli utenti finali? Sarebbe sufficiente impostare un timeout di sessione assoluto a 24 ore? di più?

L'applicazione su cui sto lavorando sarà collocata all'interno della rete aziendale interna ed è utilizzata dagli utenti per svolgere le loro mansioni di lavoro quotidiane in modo che la richiesta di re-autenticazione più frequente possa essere un problema di usabilità.

    
posta Salamander 29.11.2015 - 21:44
fonte

2 risposte

5

Non esiste una risposta rigorosa alla durata. I limiti dei timeout inattivi dipendono dalle normative e dalle leggi eventualmente giurisdizionali.

L'accesso basato sulla sessione ai dati dei titolari di carta in PCI DSS 3.1 deve essere "ragionevole". PCI DSS 3.1 nella voce 8.1.8 fornisce indicazioni specifiche su questo

8.1.8 If a session has been idle for more than 15 minutes, require the user to re-authenticate to re-activate the terminal or session.

SOURCE: link

Esistono suggerimenti simili per altri programmi di conformità. Renderlo configurabile e flessibile in base al contesto di sensibilità dei dati è probabilmente la soluzione migliore.

I timeout assoluti non sono obbligatori in nessun contesto che conosca, ma sembrano interessanti. L'impatto sull'esperienza utente è potenzialmente significativo, ma anche il vantaggio di limitare la durata di un dirottamento di sessione è significativo. Sembra una soluzione migliore - se controlli il codice dell'applicazione - sarebbe la rotazione della sessione (es .: un rinnovo del timeout in linguaggio OWASP) per cui l'applicazione genera periodicamente un nuovo ID di sessione.

Raccomando di perseguire un rinnovo del timeout se l'applicazione lo consente e utilizza un timeout di rinnovo non superiore a 1 ora. Ciò riduce sostanzialmente il rischio di dirottamento e dovrebbe essere pratico con qualsiasi applicazione che abbia uno stato di sessione diretta (di piccole dimensioni e copiabile manualmente) o serializzabile.

Se Absolute Timeout è la tua unica opzione, farei il timeout di 24 ore. È un limite ragionevole e limita la sorpresa. Un timeout assoluto di più giorni probabilmente confonderebbe gli utenti poiché vedrebbero il re-prompt come arbitrario o potenzialmente indicativo di un errore dell'applicazione.

    
risposta data 29.11.2015 - 22:52
fonte
0

24 ore è probabilmente troppo, 24 minuti è il valore predefinito per le sessioni PHP (session.gc_maxlifetime) ma c'è solo una probabilità dell'1% che le sessioni scadano dopo questo tempo (session.gc_divisor).

Devi impostare il divisore per la garbage collection su 1, quindi è 100%.

link

Devi controllare come funzionano le sessioni e la garbage collection nel linguaggio server che usi.

Quando il browser è chiuso, anche la sessione viene chiusa e probabilmente verrà eliminata dalla garbage collection.

Ci sono raccomandazioni chiare nel cheatsheet:

Common idle timeouts ranges are 2-5 minutes for high-value applications and 15- 30 minutes for low risk applications.

Ma tieni presente che le sessioni non terminano automaticamente dopo 24 minuti quando la garbage collection non le elimina di sicuro (il divisore).

Puoi sempre riprendere una sessione nel tuo codice ed estenderne la durata quando un utente è attivo. Se l'utente non è attivo per un tempo specifico, lascia scadere la sessione ed eliminalo.

Ma una singola sessione dovrebbe essere il più breve possibile e deve scadere.

link

    
risposta data 29.11.2015 - 22:12
fonte

Leggi altre domande sui tag