Question:
Quels sont les risques de simplement effacer les cookies au lieu de se déconnecter?
Joseph
2019-06-01 04:14:59 UTC
view on stackexchange narkive permalink

Un workflow d'authentification Web typique ressemble à ceci:

  1. L'utilisateur fournit ses informations d'identification.
  2. Le serveur valide les informations d'identification.
  3. Si les informations d'identification sont valides
    • Le serveur génère un jeton.
    • Le serveur conserve ce jeton.
    • Le serveur répond à la connexion avec ce jeton.
  4. Le navigateur stocke le jeton.
  5. Le navigateur effectue des requêtes avec un jeton.
  6. Le serveur valide le jeton et répond en conséquence.

Normalement, ce jeton est stocké dans un cookie. La présence et la validité du jeton dans une demande permettent au serveur de savoir si le client qui fait la demande est authentifié. Pas de jeton, pas d'entrée, ce qui revient en fait à ne pas être connecté. Donc ...

  • Puis-je simplement me déconnecter en effaçant les cookies au lieu de fermer la session?
  • Quels sont les problèmes liés au simple effacement des cookies par rapport au clic sur le bouton de déconnexion?
Les jetons d'authentification peuvent également être conservés dans sessionStorage ou localStorage.Je suppose que vous avez l'intention de supprimer cela également?
@meriton Oui, effacer le jeton du client où qu'il soit stocké, sans utiliser le bouton de déconnexion d'un site.
Pourquoi ne pas faire les deux?Pour les raisons énumérées dans la réponse d'@Ghedipunk, vous pouvez invalider la session côté serveur en vous déconnectant, puis effacer vos cookies pour faire bonne mesure.
Rien ne vous «garantit» qu'une application Web donnée se comportera correctement lorsque vous supprimerez vos cookies / stockage.Peut-être qu'un tas de logique vitale est exécuté lorsque vous utilisez la fonction de déconnexion.Ce serait une application Web vraiment merdique, et ils auraient vraiment dû voir un cas d'utilisation aussi évident à venir.
Cinq réponses:
Ghedipunk
2019-06-01 04:23:41 UTC
view on stackexchange narkive permalink

Puis-je simplement me déconnecter en effaçant les cookies au lieu de fermer la session?

Souvent oui, pour les raisons que vous avez fournies dans votre question: sans le jeton de session dans vos cookies, une application Web typique ne saura pas qui vous êtes.

Quels sont les problèmes liés au simple effacement des cookies par rapport au clic sur le bouton de déconnexion?

Applications Web qui gérer l'authentification en suivant les directives de gestion de session OWASP invalidera la session côté serveur lorsque vous vous déconnecterez explicitement. Si vous supprimez simplement le cookie avec le jeton de session, la session peut être sujette à un détournement de session.

Utilisation des verrous de porte comme analogie pour ceux qui ne sont pas familiarisés avec les meilleures pratiques de développement d'applications Web (grâce à la discussion dans les commentaires):

Votre compte peut être vu comme une pièce dans un bâtiment. Lorsque vous vous connectez, le propriétaire du bâtiment crée une porte et y met un verrou automatique, de sorte que vous seul pouvez entrer. Votre jeton de session est votre clé, et est généralement stocké dans les cookies de votre navigateur, mais peut être stocké dans d'autres endroits.

Supprimer votre jeton en supprimant vos cookies, en vidant le cache, etc., c'est simplement détruire votre copie de la clé.

Déconnexion explicite, c'est demander au propriétaire du bâtiment de maçonner la porte. Rien ne garantit qu'ils sécuriseront votre compte, mais en tant qu'utilisateur, vous faites explicitement connaître vos souhaits.

Un attaquant peut obtenir une copie de votre clé de différentes manières, appelée session détournement, qui est de la responsabilité du propriétaire du site d'atténuer, pas les utilisateurs.

Tout d'abord, l'attaquant peut juste deviner. Si le site génère des clés de session de manière séquentielle ou utilise une méthode de génération pseudo-aléatoire à faible entropie, cela rend les devinettes beaucoup plus faciles. Les sites atténuent cela en utilisant des jetons d'entropie élevée et un recyclage de session périodique. Les sessions de recyclage n'empêchent pas l'accès, mais cela rend évident lorsqu'un accès non autorisé a été accordé.

Deuxièmement, l'attaquant peut utiliser la fixation de session: il vous donne une clé avant de vous connecter, que vous continuez à utiliser après vous être connecté. Les sites atténuent ce problème en recyclant explicitement la session lorsque vous vous connectez.

Troisièmement, une attaque de type Man-in-the-Middle. L'attaquant peut voir votre clé directement. TLS atténue cela. Il est possible de décrypter le trafic TLS via des attaques de rétrogradation, des implémentations non sécurisées et des attaques zero-day, mais celles-ci sont loin du domaine de l'utilisateur, les attaques rares et zero-day contre TLS ont tendance à générer BEAUCOUP de bruit lorsqu'elles sont découvertes (Heartbleed, et al).

En tant qu'utilisateur, vos responsabilités sont de vous déconnecter et de tenir le site responsable lorsqu'ils prennent des raccourcis avec sécurité, tout comme votre responsabilité avec votre voiture dans un parking public est pour verrouiller vos portes. Si les verrous de porte sont contournés de manière triviale, c'est la faute du fabricant, pas la vôtre.

La réponse est vraie, mais certains systèmes de gestion de session ne stockent pas l'état de la session côté serveur, mais l'enregistrent dans un cookie de manière cryptographique.Ainsi, même la déconnexion sur le serveur ne rend pas le cookie inutile.
Et parfois, la déconnexion n'invalide pas un jeton.Certains serveurs conservent le jeton après la déconnexion au cas où plusieurs appareils appartenant à l'utilisateur utilisent / partagent le même jeton.Il me semble que l'un des composants Web d'OpenStack a fait cela (je pense que c'était Laravel, mais c'était peut-être un autre front-end).La recommandation était quelque chose comme, n'utilisez pas OpenStack depuis un café Internet ou un autre endroit offrant un accès public ...
Il existe également une identification du navigateur, telle qu'utilisée par LastPass et de nombreuses banques, qui devra être répétée à chaque fois si les cookies sont effacés.
Je ne suis pas du tout d'accord, une application Web moderne peut utiliser localStorage ou d'autres moyens autres que les cookies pour stocker les clés de session.Ce n'est pas courant, mais pas inconnu non plus.
Une raison est répertoriée par Ghedipunk (le jeton est toujours valide côté serveur).Une autre chose est que certains systèmes peuvent stocker des jetons dans le stockage local au lieu de cookies.par exemple.vous pouvez le voir dans la console OpenShift.Ensuite, la suppression du cookie ne supprimera pas le jeton de votre ordinateur.
@TomášZato, je réponds pour une application web _typique_, puisque c'était dans la question.Je pense que des réponses supplémentaires avec une autre gestion de session non typique seront utiles, si vous êtes prêt à en écrire une.
Un conseil de sécurité qui n'est applicable que dans des scénarios * typiques * n'est pas un bon conseil de sécurité.Vous devez toujours verrouiller votre voiture même si * généralement *, personne n'essaye même si la porte est ouverte.
@TomášZato, je dirais qu'en utilisant une analogie de serrure de porte, il n'y a généralement pas de menace qu'un attaquant puisse deviner, contraindre ou intercepter un jeton de session.En tant qu'utilisateur, vous devez toujours «verrouiller la porte» en vous déconnectant et en invalidant la session.Ou, pour prolonger l'analogie, la déconnexion bloque la porte et la suppression de votre copie locale du jeton de session détruit simplement votre clé;il peut toujours être sélectionné ou la clé peut avoir été copiée.Je pense toujours que si vous écrivez une autre réponse en passant en revue les façons dont les sessions sont identifiées autres que les cookies, cela peut être utile.
Donc, se connecter en mode incognito et fermer la fenêtre n'est pas une bonne idée
Mohammad Ali
2019-06-02 10:31:11 UTC
view on stackexchange narkive permalink

Certains sites Web utilisent des méthodes non basées sur les cookies pour stocker des données sur l'ordinateur d'un utilisateur, telles que le stockage local HTML5 et le cache du lecteur Flash qui peuvent contenir des informations sensibles.

Par exemple, votre client de messagerie peut stocker votre brouillon d'e-mail dans le stockage local de sorte que si vous actualisez accidentellement la page / fermez le navigateur, vous pourrez reprendre là où vous vous êtes arrêté. Ces données sensibles seront normalement supprimées lorsque vous cliquez sur le bouton de déconnexion sur un site Web bien conçu et ne seront pas supprimées simplement en supprimant vos cookies.

Seules les applications mal conçues et non sécurisées stockent des informations sensibles sur le client.C'est pourquoi votre commentaire n'est pas correct.
@mentallurg D'un autre côté, il y en a vraiment trop.
@michaelb958: Vous ne comprenez pas le problème.Si l'application stocke des données sensibles côté client, il s'agit d'un problème indépendant de la déconnexion, car par exemple, la connexion peut être interrompue et ces données ne seront en aucun cas supprimées.Donc, la déconnexion ne le rend pas essentiellement meilleur.C'est pourquoi ne dites pas qu'il vaut mieux se déconnecter que supprimer les cookies.
@mentallurg si la connexion est «interrompue», l'utilisateur moyen ne pourra pas se déconnecter et ne pourra pas supprimer son (ses) cookie (s) de session.Ils seront donc connectés lorsque l'ordinateur sera reconnecté à Internet.
@mentallurg Je comprends parfaitement le problème.Le commentaire reflétait le nombre d'applications apparemment écrites par des développeurs qui ne le font pas.(Nombre: supérieur à 0. Nombre souhaité: 0.)
@Mohammad Ali: Hmmm vous ne comprenez pas non plus le problème.Lorsque la connexion est rétablie après une longue période, les cookies sont expirés et le serveur ne détecte aucune session et considère l'utilisateur comme non connecté et ne suggère pas de se déconnecter.Ainsi, l'utilisateur ne peut pas se déconnecter même s'il le souhaite.Ainsi, les données sensibles restent sur le client.Cela signifie que dire que la déconnexion est plus sécurisée que la suppression des cookies est une erreur.
@mentallurg Je comprends le problème, je souligne simplement que de nombreux sites Web le font en fait.De plus, si le cookie de session n’expire pas (ce que font de nombreux sites), alors ce que j’ai dit est vrai.
@Mohammad Ali: Dans certains cas, il peut y avoir un comportement, dans d'autres cas d'autres.Mais ce n'est pas ainsi que les problèmes de sécurité sont discutés.Même s'il y a un seul cas où votre approche ne fonctionne pas, votre solution est erronée.Maintenant, regardez l'OP.Quelle devrait être la réponse?La réponse doit être la suivante: Non, la suppression des cookies présente LES MÊMES risques que la déconnexion.
@mentallurg "Même s'il y a un seul cas où votre approche ne fonctionne pas, votre solution est erronée."Je ne vois pas pourquoi vous pensez que c'est ce cas.Mohammad Ali déclare simplement que se déconnecter explicitement est * mieux * parce que cela fonctionne plus souvent que l'alternative proposée, pas que cela fonctionne à chaque fois.Si vous avez besoin d'une approche pour travailler pour «chaque cas d'utilisation unique» sinon c'est défectueux, alors vous pourriez aussi bien suggérer qu'OP ne prend même pas la peine de se déconnecter car il y a toujours une chance non nulle que la fonctionnalité de déconnexion ne fonctionne pas.
Vipul Nair
2019-06-01 18:57:31 UTC
view on stackexchange narkive permalink

Puis-je simplement me déconnecter en effaçant les cookies au lieu de fermer la session?

Oui, puisque l'application Web utilise des cookies pour vous identifier de manière unique, la suppression des cookies vous déconnectera.

Quels sont les problèmes liés à l'effacement des cookies et au clic sur le bouton de déconnexion?

Le bouton de déconnexion a un but particulier en ce qu'il envoie une demande de suppression la session et renvoie également une réponse pour supprimer le cookie dans votre navigateur. Si vous n'envoyez pas de demande de suppression de la session, la session reste active côté serveur. Les sessions ont une durée de vie maximale et seront éventuellement supprimées par le ramasse-miettes.

Comme expliqué par Ghedipunk ci-dessus, les déconnexions explicites sont utilisées pour empêcher le détournement de session / cookie.Surtout sur les ordinateurs partagés, il peut y avoir un logiciel pour enregistrer tous les cookies créés, de sorte que même lorsque les gens effacent les cookies (ou ferment une fenêtre de navigation privée), ces cookies sont conservés de manière malveillante.La déconnexion explicite invalide ces cookies, donc même s'ils ont été enregistrés, ils ne peuvent pas être rejoués sur le serveur pour l'authentification.
* "Puisque l'application Web utilise des cookies pour vous identifier de manière unique, la suppression des cookies vous déconnectera." * - Je ne pense pas que ce soit correct.La suppression d'un cookie est une action côté client.Le serveur ne sait rien du fait qu'un client supprime un fichier.Vous devez explicitement indiquer au serveur de vous déconnecter.
@jww qui est ce que j'ai écrit ici "Le bouton de déconnexion coupe un objectif particulier qu'il envoie une demande de suppression de la session et renvoie une réponse pour supprimer le cookie dans votre navigateur également"
mentallurg
2019-06-04 02:21:56 UTC
view on stackexchange narkive permalink

Il n'y a aucun risque.

Quelqu'un a signalé que cela pourrait augmenter le risque de piratage de session. Mais ce n'est pas vrai. Si l'application a une session (est avec état), cette session a un délai d'expiration. Et après l'expiration de la session, il n'y a rien à détourner. Si la session est active, alors les chances de détourner une session d'un utilisateur actif sont presque les mêmes que pour une session "orpheline". En tenant compte des outils qui détectent rapidement plusieurs requêtes avec des identifiants de session non valides de quelqu'un qui tente de forcer l'identifiant de session, il n'y a pas de risque supplémentaire côté serveur .

Du côté client , il peut y avoir plus de risques en cas de déconnexion qu'en cas de suppression des cookies. La déconnexion invalide la session, mais peut conserver d'autres données sensibles. Par exemple, lorsque vous vous déconnectez de Google Mail, votre nom d'utilisateur est toujours conservé dans les cookies; et lorsque vous accédez à Google Mail, vous verrez votre nom d'utilisateur prérempli. Premièrement, vous ne voulez peut-être pas que quelqu'un derrière votre épaule voie cet identifiant d'utilisateur. Deuxièmement, si vous êtes pressé, vous pouvez vous connecter à un mauvais compte (de vos multiples comptes). Des problèmes similaires peuvent survenir dans d'autres applications. Où, comme lorsque vous supprimez les cookies, vous êtes sûr qu'il n'y a rien de conservé dans votre navigateur dont vous n'êtes pas au courant; vous ne serez pas surpris par les données stockées dans les cookies. Ainsi, en cas de déconnexion, le risque de surprises négatives est plus élevé qu'en cas de suppression des cookies. Je dois dire que lorsque l'on supprime des cookies, il faut également envisager de supprimer le stockage local.

Un seul inconvénient que je vois en cas de suppression des cookies est que le serveur utilisera un peu plus de ressources pour conserver les données de session jusqu'à l'expiration de la session. Mais la question dans OP concerne les risques pour le client. Il n'y a donc aucun risque. Et de nos jours, la plupart des applications n'ont aucun état sur le serveur; se déconnecter signifie dans ce cas simplement invalider le jeton; il n'y a souvent aucune ressource bloquée par session. Ainsi, même une session "orpheline" ne prend pas de ressources supplémentaires.

Un autre aspect à considérer: selon l'application et la connexion Internet, la déconnexion peut prendre un temps considérable, quelques secondes. Où la suppression des cookies (et du stockage local) se produit immédiatement et ne dépend pas du serveur et de la connexion Internet.

Peut-être que quelqu'un trouvera d'autres points importants que j'ai négligés et critiquera mon point de vue. C'est très bien. Je voulais simplement encourager les utilisateurs à ne suivre aucune règle aveuglément, mais à réfléchir à ce qui se passe réellement.

Je suis tout à fait d'accord pour dire que les risques sont très minimes, mais pas qu'il n'y a aucun risque.Par défaut, PHP stocke les données de session dans le répertoire / tmp du serveur sans aucun système d'expiration explicite autre que le tri régulier des fichiers qui n'avaient pas été récemment consultés.J'ai vu le travail cron configuré pour être nocturne, hebdomadaire, mensuel et même désactivé.- Juste un petit pinard, cependant.Je trouve la sécurité - et la paranoïa en général - plus facile à gérer si je remets en question une déclaration absolue.
Soronel Haetir
2019-06-01 18:34:20 UTC
view on stackexchange narkive permalink
Je considérerais de ne pas pouvoir accéder au site lorsque l'utilisateur a oublié le mot de passe (même s'il s'agit de l'utilisateur) une fonction de sécurité.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 4.0 sous laquelle il est distribué.
Loading...