Empêcher l'utilisateur de trouver le mot de passe par le biais de Firebug/Chrome Dev Tools
Pour le passeport champ de saisie:
<input type="text" required="" tabindex="2" class="std_textbox" placeholder="Enter your account password." id="pass" name="pass">
Lorsque le <input type="password">
est changé à <input type="text">
Le mot de passe est révélé. Cela peut être dangereux dans les systèmes qui ont les mots de passe enregistrés ou générés à partir de gestionnaires de mots de Passe.
Pouvez le cryptage côté client être utilisé ici? Comment peut-il être mis en œuvre?
- Je ne suis pas sûr si je comprends pourquoi vous voulez empêcher un utilisateur de voir son mot de passe si elle le souhaite. Est-il un cas d'utilisation qui a besoin de vous pour chiffrer le mot de passe d'utilisateur de l'utilisateur lui-même?
- Je voudrais que le chiffrement à partir du site web de la fin pour le navigateur.
- Mais pourquoi voulez-vous de les chiffrer? L'utilisateur peut voir son propre mot de passe si elle le souhaite, peut-elle pas? Est-il un cas d'utilisation lorsque quelqu'un aurait besoin de le révéler dans ce hack, sauf pour le plaisir?
- Si il y a une forme de remplissage activé comme Roboform ou le mot de passe est enregistré dans le navigateur en raison de "se Souvenir de moi", tout utilisateur qui a accès à son ordinateur peut obtenir le mot de passe facilement.
- Pourrait autocomplete=off vous aider dans votre situation?
- Merci pour la suggestion, mais il semble est ignoré dans les navigateurs modernes: stackoverflow.com/questions/3868299/...
- Peut-être quelque chose qui peut être fait dans le gestionnaire de mot de passe, pour obliger l'utilisateur à entrer son mot de passe local avant de laisser le navigateur obtenir le site web de mot de passe.
- Que pensez-vous de la réponse? Nous pouvons en discuter si vous pouvez fournir de la rétroaction.
- Je vais devoir attendre jusqu'à la générosité de la période. J'ai besoin de plus de réponses de l'autre point de vue. Peut-être que quelque chose à ajouter à cela.
- Les points sont juste une représentation graphique des caractères pour un mot de passe d'entrée, la valeur peut être manipulé avec
document.getElementById('pass').value
ainsi - Si cette forme d'apport ou de gestionnaire de mot de passe ne donner les mots de passe à tout le monde qui a accès à l'ordinateur, alors il n'y a rien de répétition, rien - que votre site web peut faire contre cela. Votre site web n'est même pas impliqué dans ce vecteur d'attaque.
- J'ai mis à jour ma réponse. Les solutions proposées ici ne fonctionnera pas pour votre cas d'utilisation. Et encore, la plupart des développeurs se dit-il, vous ne pouvez pas l'en empêcher. Je sais que vous essayez dur et vous voulez croire qu'il existe une solution, mais croyez-moi: Il n'est pas avec les navigateurs que nous utilisons.
- La réponse n'est pas correcte et vous ne devriez pas avoir accepté. J'ai ajouté un commentaire.
- supposons qu'un utilisateur du manager qui se passe pour vous connecter au système de lui enseigner une fonctionnalité donnée, en vous connectant avec son (le gestionnaire) des informations d'identification. Supposons maintenant qu'ils sont interrompus dans le processus, et le gestionnaire oublie de continuer, en laissant la fenêtre ouverte où il était. C'est juste un exemple. C'est vrai, nous parlons des cas limites, mais ce fut une énorme surprise pour moi, en termes de vulnérabilité qu'il offre. (En passant, il en est venu à ma connaissance après avoir été rapporté par un de nos clients.)
- Je ne doute pas le cas d'utilisation, mais je doute qu'il y est totalement sécurisée, la solution côté client
Vous devez vous connecter pour publier un commentaire.
Comme déjà dit, avoir un mot de passe dans un élément de permettre à l'utilisateur de facilement révéler le mot de passe.
...Et comme @Elyasin demande, vous devriez vraiment laissez-nous savoir ce que votre cas d'utilisation est.
Être dans l'obscurité au sujet de votre cas d'utilisation, supposons que vous avez un site web que les utilisateurs peuvent s'abonner à de frais, et vous ne voulez pas que plusieurs utilisateurs partageant une même personne de connexion pour contourner le paiement de vos frais d'abonnement.
Vous pouvez utiliser l'authentification par cookie pour vérifier qu'un utilisateur est abonné à votre site.
Lorsqu'un nouvel utilisateur s'inscrit, envoyez un e-mail contenant un lien à une page d'inscription sur votre site web.
Lorsque l'utilisateur suit le lien, placer un cookie sur l'ordinateur de l'utilisateur en indiquant qu'ils sont un abonné valide.
Créer une page de destination sur votre site. Cette page d'atterrissage va lire le cookie sur l'ordinateur de l'utilisateur et de s'authentifier qu'ils sont, en effet, un abonné valide.
Toutes les autres pages de votre site doit rediriger les utilisateurs vers la page d'atterrissage, si les utilisateurs n'ont pas la validation de cookie.
Depuis des nations unies-ont souscrit les utilisateurs peuvent être redirigés vers la page de destination, vous pourriez offrir à leur permettre d'être abonnés sur la page de destination.
Si un abonné de l'utilisateur de l'abonnement a expiré, vous prenez le cookie désactiver le (désabonné) ordinateur de l'utilisateur, la prochaine fois qu'ils visitent votre site. Comme tout abonné de l'utilisateur, vous rediriger vers la page de destination.
Même s'il est vrai que les cookies peuvent être interceptées ou de vol, il est généralement au-delà de l'utilisateur occasionnel de la capacité de le faire.
Si vous voulez plus de sécurité à l'aide de cookies, vous pouvez capturer une adresse IP de l'utilisateur quand ils ont d'abord vous inscrire. Ensuite, vous pouvez vérifier que l'utilisateur a une validation de cookie et est également accès à partir de la même adresse IP à l'origine abonnez-vous de. Bien sûr, cela limite le abonnez-vous à l'aide de leur seule origine de l'adresse IP pour accéder à votre site.
Réponse courte: Il ne peut pas être empêché, malheureusement. C'est parce que tous les code côté client (JavaScript) est modifiable par le client lui-même - donc faire un client basé sur le système de sécurité vulnérables.
La seule solution viable que je pense, est de stocker un haché représentation du mot de passe, au lieu du mot de passe brut. Ce sera (si l'on fait abstraction de hachage attaques bruteforce) garder le mot de passe brut coffre-fort.
Une table de hachage est une représentation du texte original, et est non réversible. C'est, à l'origine de la chaîne de caractères ne peut pas être récupéré par n'importe quel algorithme, en utilisant uniquement le hachage. Exemples de hash est MD5 et SHA. Cette technique est couramment utilisé dans les routeurs, où le mot de passe est souvent stocké dans le navigateur.
Clarification: ne Jamais stocker vos mots de passe en texte clair, et si vous souhaitez adopter cette technique de pré-entré le mot de passe; le hachage et/ou le chiffrement doit se produire sur le côté serveur.
J'ai vu des solutions à des réponses différentes. Dans tous les cas, il est juste plus difficile de voir le mot de passe, mais il n'a pas empêcher quelqu'un de voir.
Je ne pouvais pas penser à un cas d'utilisation, mais vous avez mentionné forme automatique de remplissage et la se Souvenir de moi option.
Forme automatique de remplissage, autant que je sache, sont les maître-mot de passe protégé. Ils devraient être; je ne voudrais pas utiliser un si je ne pouvais pas l'activer ou le désactiver en toute sécurité. Dans ce cas, il est de ma responsabilité de vous déconnecter, chaque fois que je suis en situation de partage d'un ordinateur.
Se souvenir de moi option, comme souvent promue par les sites web, doit être utilisé uniquement lorsque c'est votre ordinateur personnel et vous ne vous attendez pas à partager votre appareil avec une autre personne. Ne l'utilisez pas ou assurez-vous que personne d'autre utilise votre compte. Encore une fois, il est de votre responsabilité.
Maintenant, vous voyez toujours un besoin pour éviter qu'un tel attaque. Tout ce que je peux venir avec est la suivante:
Qui pourrait vous aider dans le scénario suivant: Garder le mot de passe sous forme cryptée. Ils doivent toujours correspondre. Toutefois, lorsque l'utilisateur veut changer son mot de passe, il sera clair dans le texte. L'utilisateur ne peut pas taper dans une forme cryptée. Vous avez à résoudre. Il existe des solutions. Je suis sûr que vous obtenez ce que l'.
Ce qui pourrait vous aider dans le scénario suivant: Le serveur envoie la version hachée. De cette façon, aucun attaquant peut utiliser cette information. Vous devez concevoir en conséquence, mais j'imagine que vous aussi.
Laissez-moi vous expliquer pourquoi. Vous voulez empêcher un attaquant de voir le mot de passe dans le cas où un utilisateur se souvient des mots de passe ou utilise une forme automatique de remplissage. Ainsi, si un attaquant est en mesure d'accéder à l'ordinateur d'un utilisateur, il serait en mesure de simplement vous connecter, pourquoi prendre la peine de voir le mot de passe?
Si vous pouvez l'utiliser, de le faire. Elle ne résout pas complètement le problème, mais vous pouvez vous attendre à augmenter la sécurité. En particulier, il est plus difficile pour un attaquant.
Comme il est clientside, il n'y a pas de véritable moyen de l'en empêcher. En termes d'un modèle de sécurité: nous ne pouvons pas faire confiance au client. D'autre part, cependant, il n'y a pas de véritable moyen de mettre en œuvre de façon différente sans l'utilisation d'un tiers de l'appareil.
Si vous êtes prêt à passer par la peine d'avoir un tiers de l'appareil d'aider à l'authentification: le site de générer et d'afficher une valeur aléatoire, que l'appareil demande pour la graine et le mot de passe pour générer un hachage, et de s'authentifier sur le site à l'aide de la table de hachage. Bien sûr, le hash sera toujours visible si vous utilisez un web de débogueur, mais au moins il n'y a aucun point dans le stockage/lecture comme de hachage différentes pour chaque session. Ce n'est pas complètement sécurisé soit, par ailleurs, que cette méthode est sujette à l'attaque à texte clair choisi.
Bravo si vous êtes prêt à passer par tout ce mal si. Je suppose que vous pourriez écrire une application pour cela de disposer d'un smartphone de la fonction en tant que tiers de l'appareil.
Absolument pas. Vous ne pouvez pas empêcher l'utilisateur de manipuler le DOM à partir d'outils de développement ou de firebug.
je crois que le problème que vous rencontrez est de plusieurs personnes utilisent le même ordinateur, et si un utilisateur enregistre son mot de passe sur votre site, alors toute autre personne qui visite le site sur le même pc devra être capable de manipuler le champ de révéler le mot de passe.
Un moyen de prévenir ce problème est de désactiver l'auto-complétion.
autocomplete="off"
Placez ce code dans l'élément d'entrée et même si le mot de passe est enregistré, il ne devrait pas.<input autocomplete="off" type="text" required="" tabindex="2" class="std_textbox" placeholder="Enter your account password." id="pass" name="pass">
Pros
Vous n'avez pas à vous soucier des utilisateurs partageant les ordinateurs, et les mots de passe étant révélé pour la plupart.
Contre
les Utilisateurs peuvent penser que leurs mots de passe sont enregistrés (et ils peuvent encore enregistrer les mots de passe), mais quand ils viennent à votre site, il ne sera pas affiché.
NOTE Ce n'est pas la pleine preuve de prévenir les utilisateurs de la manipulation de la forme et de récupérer les mots de passe d'autres utilisateurs.
Comme une note de côté, si le site n'est pas actualisé après la saisie d'un mot de passe et nom d'utilisateur, le navigateur web ne vont pas vous demander d'enregistrer le mot de passe. Par exemple, en utilisant un appel ajax au lieu de soumettre le formulaire.
Vous pouvez utiliser JavaScript pour effacer le texte à l'intérieur du champ de mot de passe lorsque la page se charge. Un meilleur style serait d'ajouter le champ lorsque le chargement de la page avec du JavaScript comme ceci:var x = document.createElement("INPUT"); x.setAttribute("type", "mot de passe");
Une alternative à l'autocomplete="off" la saisie semi-automatique alternative Il implique la génération d'un nom à partir de l'arrière-plan et de l'utiliser comme nom de domaines, de telle sorte que la saisie semi-automatique ne saura jamais où mettre vos utilisateurs des données enregistrées
autocomplete=off
semble être ignoré par les navigateurs modernes: stackoverflow.com/questions/3868299/...var x = document.createElement("INPUT"); x.setAttribute("type", "password");
Eh bien, il n'est pas possible avec la technologie actuelle. Comme d'autres ont dit, vous pouvez toujours vérifier tout le code côté client et d'essayer de manipuler le DOM.
L'autre solution est de mettre en œuvre des services comme la banque de connexion. Randomize le mot de passe de séquence à chaque fois que la connexion de l'utilisateur. Par exemple, si la longueur du mot de passe est de 10, donner à l'utilisateur trois champs de mot de passe, demandez à la séquence de mot de passe par exemple. 3e, 5e, 10e. Cela va changer à chaque fois que l'utilisateur essaie de se connecter. Et du côté serveur, et de les comparer.
Remarque: je pense que vous devriez éviter de faire ce qu'il va se casser de base de la fonctionnalité de navigateur.
Mais si vous insistez, vous pouvez le faire plus difficile quelqu'un pour révéler le mot de passe par "déléguer" la saisie à un autre champ de saisie et de remplir le champ mot de passe avec des caractères aléatoires.
Ci-dessous est un exemple d'une façon de le faire. Gardez à l'esprit qu'en aucun cas il ne empêcher quelqu'un de récupérer le mot de passe dans le corps de la requête directement ou s'ils trouvent votre "caché" délégué élément.
Maintenant, vous avez la possibilité de re-remplissage de votre entrée de mot de passe avec le mot de passe correct sur le formulaire de soumission, ou tout simplement avoir votre serveur attendre le mot de passe d'arriver de la déléguée champ.
Si vous avez envie, vous pouvez ajouter le style approprié pour le champ mot de passe lorsque le délégué champ est concentré et donc de donner à l'utilisateur l'impression qu'ils sont encore concentrés sur le champ de mot de passe lui-même.
Mais ne le font pas.
Vous pouvez utiliser un simple code Javascript pour stocker le mot de passe de la valeur dans une variable onblur, puis la restaurer onfoucs ou/et onsubmit.
Voici le code de démonstration et de sa démo en ligne ici:
Il est clair que la solution JavaScript est dépendante de la solution, de sorte que dans le cas de la désactivation de javascript, vous pouvez utiliser
noscript
demandant JavaScript activé sur votre navigateur.password
àtext
puis cliquez sur l'élément d'entrée de nouveau.showPassword()
qui s'applique changer le type de mot de passe à nouveau<noscript>
Bien, vous ne pouvez pas.
Mais là encore. Il est un moyen sûr pour empêcher l'utilisateur de ne jamais le voir à l'aide de la console pour Développeur - ne pas afficher le champ de SAISIE qui a le mot de passe.
L'alternative consisterait à imiter le domaine du comportement, de sorte qu'il semble être là, mais ne l'est pas. Je n'ai pas trouvé techniquement de solution encore comment il pourrait être fait, mais ici est un exemple de la manière dont il pourrait être fait: (mise à jour) http://jsfiddle.net/858kef4h/
Dans cet exemple, l'idée est de créer une DIV en fonction pseudofield qui ressemble à de la SAISIE de mot de passe et est à l'écoute des touches de l'utilisateur et l'enregistrement de la valeur d'une variable JavaScript
Cette simple hack a juste trois variables d'état pour le mot de passe, l'accent de l'état et le caché textarea
Le "curseur" de la classe est activée /désactivée à l'aide de JavaScript pour émuler réel curseur
Lorsque la div est cliqué, cela crée un textarea à l'endroit du curseur et se concentre à elle.
Vous pouvez ensuite écouter keyup/keydown et d'enregistrer les valeurs
Et lorsque vous êtes prêt à vous connecter, la valeur est dans le "pw" à la variable.
Cette créées dynamiquement TEXTAREA peut passer inaperçu par le système automatique de gestionnaires de mots de passe, car il n'est pas le genre d'ENTRÉE -champ le Mot de passe Gestionnaires s'attendent à voir.
L'utilisateur qui modifie le champ peut naturellement inspecter la valeur de cet élément en utilisant les outils de développement Chrome, mais le point ici est, si le PW manager ne considère pas que le champ mot de passe -champ, il n'est pas de la remplir avec le mot de passe de l'utilisateur précédent.
Je ne recommande pas l'utilisation de ce, de ce été fait juste de la curiosité. L'idée était de montrer que, même si vous ne pouvez pas empêcher l'utilisateur de voir les éléments, vous pouvez toujours être en mesure de cacher le résultat de Gestionnaires de mots de Passe. Mais comme le dit le vieil adage, "vous pouvez tromper certains d'entre eux de temps en temps, mais pas tous d'entre eux tout le temps".
L'expérience de l'utilisateur n'est pas le même qu'avec l'entrée standard, mais il pourrait être amélioré. Un problème est aussi que, même si l'on voulait éviter que le mot de passe pour être montré, que peut-être ce que les utilisateurs veulent vraiment. Ils veulent peut-être de l'utilisateur, le Gestionnaire de Mot de passe. Mais dans ce cas, vous êtes hors de la chance de toute façon.
Il peut aussi y avoir des problèmes avec le clic, focus et blur avec les différents navigateurs, ils peuvent ne pas fonctionner avec les appareils mobiles que vous attendez. Si ce genre de hack est déjà utilisé, vous devriez soigneusement testé. Il pourrait être utilisé, si vous savez exactement quel type de navigateurs, les utilisateurs utilisent et vous savez qu'ils ont JavaScript activé.
EDIT: j'ai testé l'approche avec certains appareils mobiles et il semblait un peu de travail, mais avec l'iPad, et a remarqué que le passage de la caché textarea va encore créer un curseur visible et de modifier le facteur de zoom, de sorte que maintenant le caché textarea est placé à l'intérieur de la pseudocursor DIV et le zoom doit suivre.
Vous ne pouvez pas, et vous ne devriez pas. Ce n'est pas un problème de sécurité, vous devriez attaquer sur votre site web. C'est à l'utilisateur de garder leur mots de passe en sécurité. Si j'ai la possibilité d'utiliser le dev console ou autrement injecter du code javascript sur votre page, peu importe ce que vous faites de l'utilisateur mots de passe vont être compromise.
Si un utilisateur choisit d'enregistrer leurs mots de passe dans son navigateur, c'est ensuite à eux pour les empêcher de tomber dans de mauvaises mains, et il n'y a absolument rien que vous pouvez faire à ce sujet sur votre site. En fait, si vous utilisez Chrome et ont des mots de passe sauvegardés, accédez à la page chrome://settings/mots de passe et cliquez sur certains champs de mot de passe.
D'autres réponses de parler de hachage des mots de passe etc. C'est quelque chose que vous devriez vraiment faire, mais sur votre serveur. Vous pouvez bien sûr de hachage ou crypter un mot de passe avant de l'envoyer sur votre serveur (et vous devriez vraiment trop, à l'aide de https), mais c'est une toute autre question.
La prémisse de cette question est que l'ordinateur client est compromise et est utilisé par quelqu'un qui ne devrait pas avoir accès. En supposant qu'un gestionnaire de mot de passe est en cours d'utilisation (tels que google Chrome) qui ne nécessite pas de mot de passe principal avant chaque ouverture de session sous forme d'auto-remplissage, il n'y a rien que vous pouvez faire pour empêcher l'attaquant d'accéder à des comptes.
Que vous essayez de résoudre un problème au niveau de l'application lorsque le problème de l'accès est plus profond que cela.
Supposons que Bob oublie de se déconnecter de son ordinateur. Un attaquant (Eve) bute sur sa ouvrir une session Windows et veut accéder à son compte PayPal. Bob utilise un gestionnaire de mot de passe pour plusieurs comptes, y compris son Gmail, Paypal, et Reddit comptes. Supposons que PayPal a pris niveau de l'application des précautions pour prévenir la Veille de l'apprentissage de Bob le mot de passe à partir d'un gestionnaire de mot de passe de l'auto-remplissage. Eve pense qu'elle va seulement être en mesure d'avoir le contrôle de Bob compte PayPal pour aussi longtemps qu'il le faudra pour Bob de retour. Mais alors, Eve avis de PayPal réinitialisation de mot de passe fonctionnalité de lien. Bob compte de courrier électronique est également compromise en raison de son mot de passe car c'est aussi dans le gestionnaire de mot de passe. Avec l'accès à Bob compte de courrier électronique, Eve peut réinitialiser l'une des Bob les mots de passe qu'elle veut. Elle pourrait maintenir l'accès par l'installation d'un keylogger sur l'ordinateur de Bob.
Ligne de fond, les problèmes de sécurité que vous essayez d'adresse au-delà de votre pouvoir d'adresse (en supposant un classique nom d'utilisateur mot de passe du modèle). Même sans présumer de rien au sujet de votre application, Eve a un accès physique à l'ordinateur de Bob, ainsi elle pourrait compromettre dans une multitude de façons.
Si vous faites vos utilisateurs d'utiliser l'authentification à deux facteurs (envoyer un code par sms via Twilio), de les faire transporter un matériel clé usb, etc...vous permettront d'accroître la sécurité et d'éviter le mot de passe du gestionnaire de problème à portée de main.
Mais en fin de compte, vous faites face à un compromis de sécurité et de convivialité. Si Bob est trop paresseux/distrait/apathie/négligent de se déconnecter de son PC, aucun montant de JavaScript que vous écrivez peut le sauver.
Bien , en 2019, il y a une façon délicate ..
vous pouvez créer des formulaires avec JavaScript /jQuery sur une div
et vous pouvez les mettre en LECTURE SEULE.
Si l'attaquant va désactiver le JavaScript puis la gen code ne fonctionne pas, alors va pas être de toute forme, au bien...
j'ai déjà vérifier sur xampp /windows 10 avec firefox et de changer avec l'inspecteur de type="password" type="text" le script "réparation" de nouveau, les choses
en BORD de travaux buggy : lorsque l'Inspecteur-je modifier ce genre de choses alors toute forme est la bande alors insérée au-dessus de document html