web-dev-qa-db-fra.com

Suggestions pour éviter le détournement de cookie dans une application Web

Je développe des applications Web depuis un certain temps maintenant. Tout en faisant des sites Web, la fonctionnalité "Nott Me" est l'une des fonctionnalités les plus triviales (lues comme des clients insuffisantes) à mettre en œuvre. Jusqu'à aujourd'hui, j'utilisais simplement les implémentations par défaut fournies par le système d'authentification ASP.NET - que je dois dire, est assez sécurisée (aussi longtemps que l'on ne fiite pas avec la mise en œuvre par défaut fournie). Mais aujourd'hui, je viens de gagner des détails sur les détails de la mise en œuvre de cette fonctionnalité. J'ai fait des recherches et j'ai parcouru quelques articles connexes:

Troy Hunt- Comment et comment ne pas construire

amélioration de la meilleure pratique du cookie de connexion persistée

L'article de Troy est fondamentalement à la fin de la conclusion que, si possible, vous ferez mieux de ne pas mettre en œuvre cette fonctionnalité, peu importe ce que, malgré vos meilleurs efforts, vous allez toujours devoir être à un compromis liés à la sécurité. . De même, l'article de Barry, basé sur Miller, Charles Design, il possède de très belles étapes stratégiques pour minimiser la surface d'attaque et compliquer le vecteur d'attaque.

Donc, en descendant au point principal, après avoir passé ces articles, une chose qui se ressentait dans mon esprit était, why are the cookies not signed by the browsers ? Wouldn't it be best if each browser-client (mobile/desktop/whatever), had their own unique GUID kind of thing, which was not to be modified(under any circumstances), and then they can send their GUID to the servers, and the server could then use as the key-value to decrypt/verify any client-side information(cookies/querystrings) ?Wouldn't this solve the issue of session-hijacking/cookie-hijacking completely, as a cookie from one browser would then be totally useless for another browser ?

Désolé si cela semble naïf, mais j'apprécierais vraiment les suggestions et les commentaires à ce sujet. Merci.

6
MrClan

Ce que vous suggérez possède différentes implications de la vie privée et de la sécurité et ne fonctionnerait pas en général comme vous ne pouvez pas garantir l'authenticité de vos GUID mentionnés:

  1. Il peut être capturé facilement, il vous suffit de rediriger l'utilisateur à n'importe quel serveur Web que vous avez accès.
  2. Rien n'empêche à quelqu'un d'écrire un navigateur personnalisé (ou de modifier le code source de l'existant) pour simuler le GUID, de sorte que vos points "qui ne devaient pas être modifiés (en aucune circonstance)" ne fonctionnerait pas vraiment.
  3. Il existe diverses autres implications de la vie privée avec cette solution, telle que pouvoir suivre quelqu'un de nature unique (si vous ne regardez pas les points précédents).
1
user43488

Modifier "GUID" avec une clé privée, générée au premier lancement de navigateur/fourni par l'utilisateur (ou peut-être sur la base de domaine), ainsi qu'un moyen de signer et d'identifier la réponse du client.

C'est exactement à quel point l'authentification automatique basée sur l'authentification automatique de Shell (SSH). Mais pour réaliser réellement, vous devez éditer le navigateur pour utiliser une clé privée basée sur un domaine, vous ajoutez une page de connexion dans laquelle une connexion réussie permettra de télécharger la clé publique du client et qu'il devra être stocké et MOD le serveur HTTPS à vérifier. L'identité du client contre celui stocké.

Notez que cela ressemble beaucoup au HTTPS réel, vous devez simplement ajouter une clé de téléphone client persistante et une clé latérale du serveur <-> Session.

Ceci est en fait appelé "Handshake TLS authentifié par le client", mais l'échange de clé par connexion classique est hors de la norme.

Ensuite, votre session est sécurisée tant que la clé privée est sécurisée, mais parce que déjà de nombreux navigateurs donnent un moyen de stocker le mot de passe, cela ne devrait pas être considéré comme une grande préoccupation.

1
Lesto