web-dev-qa-db-fra.com

Arrêtez LastPass en remplissant un formulaire

Existe-t-il un moyen d'empêcher l'extension de navigateur LastPass de remplir un formulaire HTML avec un champ de saisie portant le nom "nom d'utilisateur"?

Ceci est un champ caché, je ne souhaite donc pas qu'un logiciel l'utilise pour ses besoins:

<input type="text" name="username" id="checkusername" maxlength="9" value="1999" class="longinput" style="display:none">

La solution ne doit pas ressembler à "renommer le champ de saisie".

102
Marco

Ajouter

data-lpignore="true"

dans un champ de saisie, la case grise LastPass [...] m'a été désactivée.

En provenance de LastPass.com

112

Deux conditions doivent être remplies:

  1. Le formulaire (pas l'élément) doit avoir autocomplete="off" attribut
  2. L'utilisateur de Lastpass doit avoir cette option activée: Settings > Advanced > Allow pages to disable autofill

Cela dépend donc à la fois de l'utilisateur et du développeur.

39
takeshin

Ce qui a fonctionné pour moi, c'est d'avoir Word "-search-" dans l'id du formulaire, quelque chose comme <form id="affiliate-search-form"> - et lastpass n'ajoute pas ses éléments aux entrées du formulaire. Cela fonctionne avec quelque chose de plus simple comme <form id="search"> Mais ne fonctionne pas avec <form id="se1rch">

36

Je sais que je suis en retard à la fête ici, mais j’ai trouvé cela lorsque j’essayais d’empêcher Last-Last de ruiner mes formulaires. @takeshin est correct en ce que l'auto-complétion n'est pas suffisante. J'ai fini par faire le hack ci-dessous juste pour cacher le symbole. Pas joli, mais je me suis débarrassé de l'icône.

Si des développeurs de lastpass lisent ceci, donnez-nous s'il vous plaît un attribut à utiliser afin que nous n'ayons pas à recourir à des choses comme celle-là.

form[autocomplete="off"] input[type="text"] {
    background-position: 150% 50% !important;
}
17
jan

Je pense que lastpass honore le autocomplete="off" attribut pour les entrées, mais je ne suis pas sûr à 100%.

EDIT Comme d'autres l'ont fait remarquer. cela ne fonctionne que si l'utilisateur a configuré son dernier passage pour honorer cela.

15
mituw16

Pour moi travaillé soit type=search qui est un peu égal à text ou en utilisant role=note.

Vous pouvez vérifier le LastPass-JavaScript mais il est énorme, vous pouvez peut-être trouver une solution de contournement, d'après ce que j'ai vu, ils ne vérifient que 4 types d'entrée, donc input type=search serait une solution de contournement:

!c.form && ("text" == c.type || "password" == c.type || "url" == c.type || "email" == c.type) && lpIsVisible(c))

Aussi, ce sont les role- mots-clés qu'ils semblent ignorer:

var c = b.getAttribute("role");
switch (c) {
case "navigation":
case "banner":
case "contentinfo":
case "note":
case "search":
case "seealso":
case "columnheader":
case "presentation":
case "toolbar":
case "directory":`

J'ai vérifié LastPass 'onloadwff.js, préparez 26.960 lignes de code :)

12
MushyPeas

Ajouter "recherche" à l'identifiant d'entrée

<input type="text" name="user" id="user-search"/>
9
Alex

Un peu tard dans la soirée, mais je viens d’y parvenir en modifiant le formulaire avec:

<form autocomplete="off" name="lastpass-disable-search">

J'imagine que ces imbéciles vont enfin penser qu'il s'agit d'un formulaire de recherche. Cela ne fonctionne pas pour les champs de mot de passe cependant! Lastpass ignore le champ de nom dans ce cas.

La seule façon dont j'ai réussi à faire cela est d'ajouter les éléments suivants directement en haut du formulaire:

<form autocomplete="off">
    <div id="lp" ><input type="text" /><input type="password" /></div><script type="text/javascript">setTimeout(function(){document.getElementById('lp').style.display = 'none'},75);</script>
</form>

Il provoque un scintillement désagréable mais supprime le non-sens de la saisie automatique - bien qu'il affiche toujours le widget "générer un mot de passe". LastPass attend jusqu'à domready et vérifie ensuite s'il y a des champs de mot de passe visibles. Il est donc impossible de masquer ou de réduire les champs fictifs ci-dessus.

5
PeteAUK

Ce code de style ES6 m'a été utile car il a ajouté data-lpignore à tous mes contrôles d'entrée:

const elements = document.getElementsByTagName("INPUT");
for (let element of elements) {
    element.setAttribute("data-lpignore", "true");
}

Pour accéder à un contrôle INPUT spécifique, vous pouvez écrire quelque chose comme ceci:

document.getElementById('userInput').setAttribute("data-lpignore", "true");

Ou, vous pouvez le faire par nom de classe:

const elements = document.getElementsByClassName('no-last-pass');
for (let element of elements) {
    element.setAttribute("data-lpignore", "true");
}
2
ccalvert

Essayé -search renommer mais pour une raison quelconque cela n'a pas fonctionné. Ce qui a fonctionné pour moi est le suivant:

  1. marquer le formulaire à compléter automatiquement - autocomplete = "off"
  2. changer le type d'entrée du champ de formulaire en texte
  3. ajouter une nouvelle classe à votre css pour masquer l'entrée, simule un champ de mot de passe
  4. bit css: input.masker {-webkit-text-security: disc; }

Essayé et testé dans les dernières versions de FF et de Chrome.

0
Louis Ferreira

Aucune des options ici (saisie semi-automatique, data-lpignore, etc.) n'a empêché LastPass de remplir automatiquement les champs de mon formulaire. J'ai adopté une approche plus résolue du problème et défini de manière asynchrone les attributs d'entrée name via JavaScript. La fonction dépendante de jQuery suivante (appelée à partir du gestionnaire d'événements onsubmit du formulaire) a été efficace:

function setInputNames() {
    $('#myForm input').each(function(idx, el) {
        el = $(el);
        if (el.attr('tmp-name')) {
            el.attr('name', el.attr('tmp-name'));
        }
    });
}

$('#myForm').submit(setInputNames);

Dans le formulaire, j'ai simplement utilisé tmp-name attributs à la place des attributs name équivalents. Exemple:

<form id="myForm" method="post" action="/someUrl">
    <input name="username" type="text">
    <input tmp-name="password" type="password">
</form>

Mise à jour 2019-03-20

Je rencontrais toujours des difficultés avec ce qui précède à cause de AngularJS, car des champs de formulaire ayant des attributs name permettaient à ngMessages de présenter correctement les messages d’erreur de validation de champ.

En fin de compte, la seule solution que je pouvais trouver pour empêcher LastPass de remplir les champs de mot de passe de mon formulaire de modification du mot de passe était la suivante:

  1. Évitez d'utiliser input[type=password]entièrement, ET
  2. ne pas avoir 'mot de passe' dans le nom du champ

Étant donné que je dois pouvoir soumettre le formulaire normalement dans mon cas, j'ai toujours utilisé ma solution d'origine pour mettre à jour les noms de champ "juste à temps". Pour éviter d'utiliser des champs de saisie de mot de passe, j'ai trouvé cette solution fonctionnait très bien.

0
John Rix