Question

J'envisage de mettre en œuvre la case classique remember-moi sur mon webapp pour permettre à l'utilisateur authentifié à « rappeler » une fois qu'il retourne à visiter mon site.

Gmail , Facebook et d'autres ont ce genre de fonctionnalité, mais je ne suis pas trop sûr de savoir comment il peut être sécurisé.

Un cadre Java comme Spring sécurité utilise un « Hash-Based approche Token. Le jeton qui obtient généré (en utilisant le nom d'utilisateur, mot de passe, et un expirationTime privateKey) est stocké dans les cookies du client « jeton = 567whatever567 ». Le jeton est ensuite réutilisée pour ré-authentifier l'utilisateur la prochaine fois qu'il revient.

Je suis préoccupé du fait que, même si le processus de connexion est passé sous une connexion https, sur chaque requête http le cookie sera envoyé non crypté sur le net.

En gros tous peut lire le jeton et le réutiliser pour authentifier.

Je suis en train de jeter un oeil à la façon dont Gmail ou Facebook mettent en œuvre cette fonctionnalité. Je peux voir Cookie comme « présence = DJ267619445G09H0L15228675 ..... » FB, d'autres dans Gmail.
Je ne suis pas trop sûr si elles utilisent une autre astuce pour protéger contre quelqu'un qui tente d'usurper l'identité d'un autre utilisateur.

Je vais essayer de me faire passer pour utiliser quelque chose comme cURL pour voir si elles sont uniquement à l'aide d'un particulier jeton de se rappeler l'utilisateur.
Si elles sont il me semble comme un gros problème de sécurité. Peut-être pas Facebook (je ne me soucie pas de celui-ci), mais avec Gmail si vous ne définissez pas « Utilisez toujours https » une connexion HTTP sera utilisé et il enverra vos jetons non-cryptés sur Internet.
Que pensez-vous?

Je l'ai aussi remarqué que les champs nom d'utilisateur Facebook / mot de passe sont exposés sous http (pas https). À cet égard, je demande aussi: ce que tous les sites exposant champ nom d'utilisateur / mot de passe sur http non sécurisée « par nature ». Une fois que la demande est envoyée sur http il n'y a pas de redirection de https »qui peut fixer les« lettres de créance visibles au monde problème.

Merci

Modifier :
Mes inquiétudes étaient fondées http://codebutler.com/
Merci aux créateurs Firesheep pour mettre en évidence le problème !!!

Était-ce utile?

La solution

Il est pas un problème pour mettre en œuvre un me rappeler. Ce que vous devez faire est de garder la session en vie longtemps (et mettre le cookie pour durer longtemps). Même Gmail vous déconnecter après une certaine période (je pense qu'il est deux semaines ou un mois). Cependant, vous devez comprendre que le maintien de la même session ouverte augmente plus la possibilité de pirater en elle. En tant que contre-mesure, vous devez augmenter la force de votre identifiant de session. identifiant de session est celui qui est dans le cookie (ou dans l'URI comme couramment dans certains logiciels comme « file.php? PHPSESSID = 1234 ... »).

La clé est de maintenir un identifiant fort de la session. Par exemple, dans Gmail, vous disposez d'un GX cookie avec une valeur similaire à

DQAAAJoAAAA8mnjaAwgkS7y8Ws5MYCl-PAQLp9ZpMXpGKR47z4L9mlBH-4qEyApAtFbnLkzv1pPqxua1hOWMGiKYpBZr-h7Icyb-NUUg2ZW_nUFIymvw9KjmjSECYTowbCsDerkAxCzSDa83b5YC1mykPv1a9ji4znt6Fsna-AKgNTntvmUxeJ92ctsSlg9iGySEmXnisVyyJiQvI8jzbZqSpE_N2RKZ

La raison pour laquelle la session Détournement est à peu près impossible est, parce que l'identifiant de session est si forte, et parce que le site utilise le protocole HTTPS partout. Personne ne peut deviner ou autrement obtenir votre identifiant de session (ne peut donc pas pirater dans votre session). Sur un rapide coup d'oeil, l'identifiant de session ci-dessus semble avoir quelque peu ~ 1250 bits de force, 1 * 10 ^ 376 possibilités différentes. Personne ne peut deviner que.

Il est évident qu'il y aura toujours des moyens potentiels de détourner encore dans la session. Par exemple, les vulnérabilités XSS ouvrent la voie de la porte pour obtenir vos cookies et donc votre identifiant de session, mais ce n'est pas vos sessions faute de quelque façon, et n'a rien à voir avec un « souvenir de moi- ».

  

Je suis préoccupé du fait que, même si le processus de connexion est passé sous une connexion https, sur chaque requête http le cookie sera envoyé non crypté sur le net.

Si vous définissez le cookie sécurisé drapeau true alors que dans le protocole HTTPS, le cookie ne sera jamais envoyé lors de l'accès au site via HTTP. Il est indispensable de le faire pour les sites HTTPS uniquement.

En général, les gens semblent utiliser uniquement HTTPS pour la page de connexion, ce qui est faux. Si l'on se soucie vraiment, il doit utiliser le protocole HTTPS sur toute la page. Dans le cas contraire, il est impossible d'empêcher toute tentative Détournement de session.

Pourquoi beaucoup utilisent encore HTTPS uniquement pour la partie d'ouverture de session? Probablement parce qu'ils ne réalisent pas ce qui est dans les enjeux, ou parce qu'il est trop lourd CPU à utiliser HTTPS partout. Cependant, il est toujours préférable d'utiliser HTTPS pour le journal en que de ne pas l'utiliser partout - car il crypte les informations d'identification (ainsi que l'identifiant de session peut être volé plus tard, pas les informations d'identification réelles lors de la connexion sur)

  

Peut-être pas Facebook (je ne me soucie pas de celui-ci), mais avec Gmail si vous ne définissez pas « Utilisez toujours https » une connexion HTTP sera utilisé et il enverra vos jetons non chiffrée sur Internet.   Que pensez-vous?

Je pense que la valeur devrait par défaut si possible, HTTPS dans tous les cas. La seule vraie raison pour pourquoi ne pas utiliser le protocole HTTPS est de l'argent (= performances / matériel).

Autres conseils

Il est généralement appelé une attaque de relecture. L'attaquant rejoue une requête en utilisant les mêmes informations d'identification (par exemple biscuits) qu'il a volé de vous, et est en mesure de vous faire passer. L'attaque XSS est juste une variation de cela, mais peut être évitée (par exemple en utilisant HTTPOnly).

La seule façon d'atténuer la plupart des attaques replay est https partout. Cela devrait tenir à l'écart la plupart des regards indiscrets.

Il y a beaucoup de techniques de prévention aussi.

Il existe aussi des dispositifs matériels qui font un meilleur travail que vous pouvez pirater un logiciel, ce qui ralentit votre serveur dans le processus, et vous aurez probablement mal. matériel spécialisé peut faire un bien meilleur travail de suivi des demandes en temps réel et la détermination que le même jeton est utilisé par de nombreux différents, tous les IP en même temps, et plus rapide qu'un seul opérateur humain doit pouvoir demander.

Dans ASP.NET 2.0+, lorsque vous utilisez l'authentification par formulaire, vous pouvez spécifier requireSSL='true' pour indiquer que les navigateurs ne doivent envoyer le cookie d'authentification lors d'une connexion https est faite. Voir cet article msdn pour plus d'informations sur la sécurisation des formulaires d'authentification.


La seule raison pour ne pas laisser remember me est de savoir si vous êtes un établissement bancaire ou une application similaire. Si vous n'êtes pas, il suffit de suivre quelques règles simples:

  1. Si vous avez remember me, mettre fin sur le cookie au plus 30 jours à l'avenir et ne glissent pas la valeur. Forcer l'utilisateur de se connecter une fois par mois est pas si mal.
  2. Toutes les opérations sensibles doivent un mot de passe. Lors de la mise à jour de facturation, les cartes de crédit, ou de compte toujours re-demande le mot de passe de l'utilisateur. La forme la plus probable de l'abus est généralement via le même ordinateur que la personne utilise, mais il assure également que même un cookie d'authentification volée sur son propre ne peut pas faire trop de mal. Vous pouvez voir mon équilibre, mais vous ne pouvez pas transférer quoi que ce soit.

D'accord avec la plupart des commentaires ci-dessus. Si vous êtes préoccupé par la sécurité, vous devriez -

a) Utiliser https partout. Même gmail a récemment commencé à utiliser https par défaut - voir http : //gmailblog.blogspot.com/2010/01/default-https-access-for-gmail.html

b) Régler le drapeau sécurisé dans votre cookie de session pour empêcher le navigateur de l'envoyer via une connexion http.

c) Fixer XSS dans votre application. Si vous avez des problèmes XSS, votre mise en œuvre de « remember me » va toujours être unsecure. Voir OWASP XSS antisèche prévention.

Y compris l'adresse IP dans l'identifiant de session est ne va pas aider. Faire cela fera le « souvenir de moi fonctionnalité » à peu près inutile, et il ne pas ajouter beaucoup de sécurité. Je sais que Google ne met pas les adresses IP dans son identifiant de session.

La seule façon de rendre le site totalement sécurisé est de permettre https partout. Vous avez raison, les cookies peuvent être reniflé et plus tard utilisées pour usurper l'identité.

Il y a deux manières de prévention session hijacking , comme le stockage de l'adresse IP du client qui a ouvert la session. Des données supplémentaires doivent être stockées côté serveur pour vérifier les sessions, même sans fonction de connexion automatique. Il est préférable d'utiliser un pour le nonce jeton (ou au moins sur la base des données non secrètes ) plutôt que le nom d'utilisateur et mot de passe haché, comme un attaquant pourrait éventuellement monter une attaque pour trouver les informations d'authentification étant donné la valeur hachée.

Si vous regardez la source de la Facebook, Gmail et probablement d'autres formulaires de connexion sites, le formulaire de connexion action utilise le protocole HTTPS, qui redirige vers une page non sécurisée, une fois la connexion réussit.

1 / Lorsque le contrôle utilisateur « remember me »: vous stockez un hachage de toutes les informations sur son ordinateur: IP, navigateur, système d'exploitation, la langue etc ... et vous écrivez ce hachage dans ses biscuits avec sa carte d'identité 2 / lorsque l'utilisateur est de retour, vous calculez son nouveau hachage. Vous comparez cette valeur à la valeur dans le cookie reçu, et la valeur de la base de données (pour l'ID donné). s'ils sont tous égaux, vous pouvez authentifier l'utilisateur.

Est-il clair?

Https ne pouvait rien faire si vous avez une attaque XSS (meilleure façon de voler un cookie)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top