OWASP Session Management Cheat Sheet ( https://www.owasp.org/index.php/Session_Management_Cheat_Sheet ) recommande d'implémenter un délai de session absolu (en plus du délai de session inactif). Cela signifie que l'application oblige l'utilisateur à se ré-authentifier quelle que soit l'activité de la session.
Existe-t-il des recommandations pour que la durée de ce délai soit suffisamment sécurisée et ne dérange pas les utilisateurs finaux? Serait-il suffisant de définir un délai d'expiration de session absolu à 24 heures? plus?
L'application sur laquelle je travaille sera placée dans le réseau interne de l'entreprise et est utilisée par les utilisateurs pour effectuer leurs tâches quotidiennes de sorte que les demandes de ré-authentification fréquentes peuvent être un problème d'utilisation.
Il n'y a pas de réponse stricte à la durée. Les limites des délais d'inactivité dépendent des réglementations et éventuellement des lois juridictionnelles.
L'accès basé sur la session aux données du titulaire de carte dans PCI DSS 3.1 doit être "raisonnable". PCI DSS 3.1 au point 8.1.8 fournit des conseils spécifiques à ce sujet).
8.1.8 Si une session est inactive depuis plus de 15 minutes, demander à l'utilisateur de s'authentifier à nouveau pour réactiver le terminal ou la session.
SOURCE: https://www.pcisecuritystandards.org/documents/PCI_DSS_v3-1.pdf
Des suggestions similaires existent pour d'autres programmes de conformité. Le rendre configurable et flexible en fonction du contexte de sensibilité des données est probablement votre meilleur choix.
Les délais d'attente absolus ne sont pas obligatoires dans aucun cadre que je connaisse, mais ils semblent intéressants. L'impact sur l'expérience utilisateur est potentiellement important, mais l'avantage de limiter la durée d'un détournement de session est également important. Il semble qu'une meilleure solution - si vous contrôlez le code de l'application - serait la rotation de session (c'est-à-dire: un délai de renouvellement dans le langage OWASP) par lequel l'application génère périodiquement un nouvel ID de session.
Je recommande de poursuivre un délai de renouvellement si l'application le permet et d'utiliser un délai de renouvellement ne dépassant pas 1 heure. Cela réduit considérablement le risque de détournement et devrait être pratique avec toute application qui a un état de session simple (petit et manuellement copiable) ou sérialisable.
Si Absolute Timeout est votre seule option, je ferais le timeout 24 heures. C'est une limite sensible et limite la surprise. Un délai d'expiration absolu de plusieurs jours dérouterait probablement les utilisateurs car ils verraient la nouvelle invite comme arbitraire ou potentiellement indicative d'échec de l'application.
24 heures, c'est peut-être trop, 24 minutes est la valeur par défaut pour PHP sessions (session.gc_maxlifetime) mais il y a juste une probabilité de 1% que les sessions expirent après cette heure (session.gc_divisor ).
Vous devez définir le diviseur pour la récupération de place à 1, puis il est de 100%.
https://stackoverflow.com/questions/156712/php-what-is-the-default-lifetime-of-a-session
Vous devez vérifier le fonctionnement des sessions et de la récupération de place dans la langue côté serveur que vous utilisez.
Lorsque le navigateur est fermé, la session est également fermée et sera probablement supprimée de la récupération de place.
Il y a des recommandations claires dans la feuille de triche:
Common idle timeouts ranges are 2-5 minutes for high-value applications and 15- 30 minutes for low risk applications.
Mais gardez à l'esprit que les sessions ne se terminent pas automatiquement après 24 minutes lorsque la récupération de place ne les supprime pas à coup sûr (le diviseur).
Vous pouvez toujours reprendre une session dans votre code et prolonger sa durée de vie lorsqu'un utilisateur est actif. Si l'utilisateur n'est pas actif pendant une durée spécifique, laissez la session expirer et supprimez-la.
Mais une seule session doit être aussi courte que possible et doit expirer.