web-dev-qa-db-fra.com

Existe-t-il un moyen de faire en sorte que le navigateur supprime immédiatement le mot de passe de connexion de sa mémoire, comme Chrome semble fonctionner sur accounts.google.com?

J'ai fait quelques tests et constaté qu'un vidage de mémoire de Chrome ne contient pas le mot de passe de gmail.com/Google après la connexion à ce site (la connexion se produit sur accounts.google.com ).

(Mon système est Windows 10 64bit Professional, Chrome 60).

Je peux trouver les mots de passe de tous les autres sites que j'ai testés. Aussi quand je fais la même chose dans Firefox, le mot de passe gmail.com sera être stocké dans le vidage de la mémoire. Il s'agit d'un comportement spécifique à Chrome.

J'ai essayé beaucoup de choses pour empêcher le mot de passe d'être stocké dans un vidage de mémoire. Même lorsque je hache le mot de passe dans le champ mot de passe avant de soumettre le formulaire, le mot de passe d'origine (non haché) sera contenu dans le vidage de la mémoire. J'ai essayé avec autocomplete = "off", j'ai essayé d'envoyer le mot de passe via un champ "caché" et un champ de texte invisible. (Pour que le navigateur n'essaye pas de stocker le mot de passe dans le gestionnaire de mots de passe intégré).

J'ai aussi - bien sûr - essayé avec le stockage de mot de passe désactivé, effacé le cache, expérimenté avec les en-têtes Cache-Control/Pragma/Expires, et ce que non. Et je sais que le site Web de Gmail envoie bien le mot de passe non haché/original dans la demande au serveur. Il n'y a donc pas de méthode côté client impliquée pour chiffrer/hacher/obscurcir le mot de passe.

Donc ma question est: quelle que soit l'utilisation de gmail.com (accounts.google.com) pour que le mot de passe ne soit pas contenu dans un vidage de mémoire, serait-il possible de faire de même pour mon propre site Web? Ou est-ce possible une fonctionnalité codée en dur, spécifique à gmail.com, du navigateur Chrome?

Serait-ce une coïncidence, car ce site provoque beaucoup d'activité de lecture/écriture sur la mémoire, de sorte que le garbage collector se nettoie plus rapidement, ou quelque chose comme ça?

23
Martin Fürholz

D'après ce que je peux deviner, vous n'avez vraiment que deux options ici:

Option 1: travail de Google

Commencez par observer de très près le comportement Javascript/réseau. Comme quelqu'un l'a mentionné dans les commentaires, travailler à partir d'un clone total pourrait donner de bons résultats. Cependant, personnellement, je n'aurais vraiment pas hâte de faire ce genre de débogage hardcore.

Option 2: certains javascript qui (pourraient) aider

Tout sauf envoyer le mot de passe dans le POST. Par exemple, voici toutes les solutions valides (non testées):

  • Essayez de remplacer chaque caractère au fur et à mesure qu'il est tapé (par exemple, le chiffrement de la clé d'origine avec un chiffrement de flux avec une clé spécifique à la session - alors il peut être récupéré de l'autre côté)
  • Essayez simplement de capturer l'entrée de clé et de la simuler en apparaissant dans la zone de texte (de cette façon, rien du tout n'est mis en cache - je doute que les frappes soient mises en cache: D)
  • Aucune garantie que cela fonctionnera: mais essayez simplement de manipuler le contenu d'entrée juste avant la publication (mais gardez à l'esprit que quelque chose de simple comme un Ceaser Shift ne fonctionnera vraiment pas, car un attaquant assez intelligent INVERSE simplement cela)

Je soupçonne fortement que la deuxième approche dans la liste ci-dessus est la seule chose qui fonctionnera (capture des entrées clés), car il est probable que les entrées sur les zones de texte sont toujours conservées en mémoire (je ne sais pas comment Google gère cela - mais J'ai une grande confiance dans la 2ème option de la liste).

Peut-être plus tard dans la journée/demain je posterai un exemple minimal avec des tests

2
Samuel Allan