Eingabetyp = Passwort, lassen Sie den Browser das Passwort nicht merken

100

Ich erinnere mich, dass ich einen Weg gefunden habe, einen <input type="password" />solchen zu haben , dass der Browser den Benutzer nicht auffordert, das Passwort zu speichern. Aber ich zeichne einen Rohling. Gibt es ein HTML-Attribut oder einen JavaScript-Trick, der dies ermöglicht?

DavGarcia
quelle
4
Duplikat von stackoverflow.com/questions/32369/…
Jon Skeet

Antworten:

123

Versuchen Sie es mit autocomplete="off". Ich bin mir jedoch nicht sicher, ob jeder Browser dies unterstützt. MSDN-Dokumente hier .

BEARBEITEN : Hinweis: Die meisten Browser haben die Unterstützung für dieses Attribut eingestellt. Siehe Ist autocomplete = "off" mit allen modernen Browsern kompatibel?

Dies ist wohl etwas, das eher dem Benutzer als dem Website-Designer überlassen werden sollte.

Tvanfosson
quelle
2
Sie können die Seite auch mit HTTPS bereitstellen und über den HTTP-Header oder das META-Tag das Caching verhindern. Auf diese Weise wird das Passwort auch nicht gespeichert (zumindest im Internet Explorer).
Doekman
In Bezug auf die Validierung fügt HTML5 der Spezifikation das Autocomplete-Attribut hinzu, sodass es jetzt in Ordnung ist
VictorySaber
9
Hinweis für zukünftige Leser: Alle gängigen Browser ignorieren das Attribut. (siehe stackoverflow.com/a/21348793/37706 )
rdans
@ RyanDansie danke für den Hinweis. Ich habe die Antwort aktualisiert. Alte Antwort ist ... alt.
Tvanfosson
8
"Dies ist wohl etwas, das eher dem Benutzer als dem Website-Designer überlassen werden sollte." Dafür gibt es sowohl technische als auch nichttechnische Gründe. Einmalkennwörter sollten beispielsweise nicht gespeichert werden. Bank-Sites mit "Geben Sie die erste Ziffer Ihrer PIN ein" sind eine andere. Vergessen Sie nicht, dass ein Business Analyst möglicherweise entscheidet, dass er ein Kennwortfeld möchte, und entfernen Sie die Auswahl vom Entwickler.
Sprague
61

<input type="password" autocomplete="off" />

Ich möchte nur hinzufügen, dass ich als Benutzer denke, dass dies sehr ärgerlich und mühsam zu überwinden ist. Ich empfehle dringend, dies nicht zu verwenden, da dies Ihre Benutzer höchstwahrscheinlich erschweren wird.

Passwörter sind bereits nicht in der MRU gespeichert, und korrekt konfigurierte öffentliche Computer speichern nicht einmal den Benutzernamen.

Matpie
quelle
23
+1 für "Ärgern Sie Ihre Benutzer nicht". Genau das macht diese Art von Funktion. Genau wie Websites, die das Caching erzwingen, sodass die Schaltfläche "Zurück" das Formular löscht. EXTREM irritierend.
Cletus
6
+1 Ich stimme vollkommen zu. Es ist für einen Administrator, der die Kundenprofilseite bearbeitet, auf der Sie nur dann ein Kennwort eingeben, wenn Sie beabsichtigen, es zu ändern. Auf diese Weise ändern die Administratoren das Kennwort nicht jedes Mal, wenn sie die Kundeninformationen bearbeiten.
DavGarcia
14
Es ist sehr nützlich für Felder mit Kreditkartennummern. Das PayPal-Formular wird in jedem Browser gespeichert, und jeder, der Ihren Computer verwendet, kann alle Daten erneut eingeben, sodass Sie alle gespeicherten Felder manuell löschen müssen.
Egor Pavlikhin
31
In einem Formular, in dem der Benutzer ein Kennwort festlegen kann, das nichts mit seiner Anmeldung zu tun hat, ist die Aktivierung der automatischen Vervollständigung die ärgerlichere Option. Der Browser bietet möglicherweise an, ein Kennwort zu speichern, mit dem er eigentlich nichts anfangen kann. Wenn Sicherheit ein heikles Thema ist, würde ich nicht davon ausgehen, dass alle öffentlichen Computer korrekt konfiguriert sind.
jrb
3
Ich benutze dies für ein einmaliges Passwort. Wie jrb sagte, wäre es sehr ärgerlich, wenn der Browser es speichern würde.
Danation
12

Ich habe es anders gelöst. Sie können dies versuchen.

<input id="passfld" type="text" autocomplete="off" />
<script type="text/javascript">
// Using jQuery
$(function(){                                               
    setTimeout(function(){
        $("input#passfld").attr("type","password");
    },10);
});


// or in pure javascript
 window.onload=function(){                                              
    setTimeout(function(){  
        document.getElementById('passfld').type = 'password';
    },10);
  }   
</script>

#ein anderer Weg

 <script type="text/javascript">    
 function setAutoCompleteOFF(tm){
    if(typeof tm =="undefined"){tm=10;}
    try{
    var inputs=$(".auto-complete-off,input[autocomplete=off]"); 
    setTimeout(function(){
        inputs.each(function(){     
            var old_value=$(this).attr("value");            
            var thisobj=$(this);            
            setTimeout(function(){  
                thisobj.removeClass("auto-complete-off").addClass("auto-complete-off-processed");
                thisobj.val(old_value);
            },tm);
         });
     },tm); 
    }catch(e){}
  }
 $(function(){                                              
        setAutoCompleteOFF();
    });
</script>

// Sie müssen das Attribut autocomplete = "off" hinzufügen oder Sie können die Klasse .auto-complete-off in das Eingabefeld einfügen und genießen

Beispiel:

  <input id="passfld" type="password" autocomplete="off" />
    OR
  <input id="passfld" class="auto-complete-off" type="password"  />
Sarwar Hasan
quelle
4
Dies verhindert, dass der Browser das Kennwort speichert, anstatt die automatische Vervollständigung zu verhindern, was in meinem Szenario eine bessere Lösung darstellt.
Pau Fracés
Vielen Dank, ich habe an neuestem Chrome gearbeitet. Hinweis: Wird auf einem internen System verwendet, auf dem nur Chrome zulässig ist. Führen Sie weitere Tests durch, wenn Sie diese in der Produktionsstätte verwenden.
Izion
@AntoVinish, ich hoffe, meine letzte Lösung funktioniert in Firefox 40.
Sarwar Hasan
7

Ich habe Folgendes versucht und es scheint, dass es mit jedem Browser funktioniert:

<input id="passfld" type="text" autocomplete="off" />

<script type="text/javascript">
    $(function(){  
        var passElem = $("input#passfld");
        passElem.focus(function() { 
            passElem.prop("type", "password");                                             
        });
    });
</script>

Dieser Weg ist viel sicherer als die Verwendung von Timeout-Techniken, da er garantiert, dass das Eingabefeld dem Kennwort nachgibt, wenn der Benutzer es fokussiert.

Apostolidis
quelle
5

In Bezug auf Sicherheitsprobleme wird Ihnen ein Sicherheitsberater Folgendes zum gesamten Feldproblem mitteilen (dies stammt aus einem tatsächlichen unabhängigen Sicherheitsaudit):

HTML-Autovervollständigung aktiviert - In Kennwortfeldern in HTML-Formularen ist die automatische Vervollständigung aktiviert. Die meisten Browser können sich die in HTML-Formulare eingegebenen Benutzeranmeldeinformationen merken.

Relatives Risiko: Niedrig

Betroffene Systeme / Geräte: o https: // * ** * *** /

Ich bin auch damit einverstanden, dass dies alle Bereiche abdecken sollte , die wirklich private Daten enthalten. Ich bin der Meinung, dass es in Ordnung ist, eine Person zu zwingen, immer ihre Kreditkarteninformationen, ihren CVC-Code, ihre Passwörter, Benutzernamen usw. einzugeben, wenn diese Website auf etwas zugreift, das sicher aufbewahrt werden soll [allgemein oder aufgrund gesetzlicher Compliance-Anforderungen]. Zum Beispiel: Kaufformulare, Bank- / Kredit-Websites, Steuer-Websites, medizinische Daten, Bundes-, Nuklear- usw. - keine Websites wie Stack Overflow oder Facebook.

Andere Arten von Websites - z. B. TimeStar Online zum Ein- und Ausstempeln - ist dumm, da ich bei der Arbeit immer denselben PC / dasselbe Konto verwende und die Anmeldeinformationen auf dieser Website nicht speichern kann - seltsamerweise auf meinem Android aber nicht auf einem iPad. Selbst bei gemeinsam genutzten PCs wäre dies nicht schlecht, da das Ein- und Ausstempeln für eine andere Person nichts anderes tut, als Ihren Vorgesetzten zu ärgern. (Sie müssen hineingehen und die fehlerhaften Stempel löschen - wählen Sie einfach, nicht auf öffentlichen PCs zu speichern).

Michael
quelle
5
Fügen Sie hier einfach einen Kommentar hinzu, aus einem Grund, aus dem Sie kein Passwort speichern möchten. Ich unterhalte eine Website mit Benutzerkonten, auf der Administratoren das Kennwort eines Benutzers ändern können. Der Client ist derzeit wütend, dass Chrome anbietet, das im Formular "Kennwort ändern" eingegebene Kennwort jedes Mal für jeden Benutzer zu speichern , da das Bearbeitungsbenutzerformular als Anmeldeformular falsch identifiziert wird. Anscheinend gibt es keine einfachen Anweisungen wie "Klicken Sie einfach auf Nie an Passwort erinnern".
CharredUtensil
4

Hier ist die beste und einfachste Antwort! Stellen Sie ein zusätzliches Kennwortfeld vor Ihr inputFeld und stellen Sie das display:noneso ein, dass der Browser es ausfüllt, wenn Sie es ausfüllen, und zwar in einem Bereich input, der Ihnen egal ist.

Ändere das:

<input type="password" name="password" size="25" class="input" id="password" value="">

dazu:

<input type="password" style="display:none;">
<input type="password" name="password" size="25" class="input" id="password" value="">
Captain Fantastic
quelle
Eigentlich funktioniert es, wenn 2 Passwortfelder im Formular sind, aber der neue Browser das 2. Passwort ignoriert, wenn es nicht sichtbar und aktiviert ist (
Cedric Simon
1
Die Verwendung display:nonefunktioniert bei mir nicht (Chrome 61 OSX), aber dies funktioniert:<input type="password" style="position: absolute; top: -1000px;">
John Hascall
4
<input type="password" placeholder="Enter New Password" autocomplete="new-password">

Bitte schön.

Bhaumik Thakkar
quelle
2
Dies ist der Weg, es gibt viele Problemumgehungen, und es ist so einfach, getestet mit der neuesten Version von Firefox (v67) und Chrome (75).
Mariano Ruiz
Chrome 80 bietet weiterhin an, sich das Kennwort nach dem Absenden des Formulars zu merken.
Bouke
2

Lesen Sie auch diese Antwort, in der er diese einfache Lösung verwendet, die überall funktioniert (siehe auch das Update für Safari Mobile):

<input type="password" readonly onfocus="this.removeAttribute('readonly');"/>
Ferie
quelle
1

Sie können JQuery verwenden und das Element anhand der ID auswählen:

$("input#Password").attr("autocomplete","off");

Oder wählen Sie den Artikel nach Typ aus:

$("input[type='password']").attr("autocomplete","off");

Oder auch:

Sie können reines Javascript verwenden:

document.getElementById('Password').autocomplete = 'off';
Fernando
quelle
1

Sie können es auch wie folgt verwenden

$('#Password').attr("autocomplete", "off");
setTimeout('$("#Password").val("");', 2000);
Chandrika Prajapati
quelle
1

da die automatische Vervollständigung = off ist veraltet, schlage ich eine neuere Lösung.

Stellen Sie Ihr Passwortfeld auf ein normales Textfeld ein und maskieren Sie Ihre Eingabe mit "Discs" unter Verwendung von CSS. Der Code sollte folgendermaßen aussehen:

<input type="text" class="myPassword" /> 

input .myPassword{
    text-security:disc;
    -webkit-text-security:disc;
    -mox-text-security:disc;
}

Bitte beachten Sie, dass dies in Firefox-Browsern möglicherweise nicht ordnungsgemäß funktioniert und ein zusätzlicher Walkaround erforderlich ist. Lesen Sie hier mehr darüber: https://stackoverflow.com/a/49304708/5477548 .

Die Lösung wurde von diesem Link übernommen , aber um SO "No-Hotlinks" zu entsprechen, habe ich sie hier zusammengefasst.

yoad w
quelle
0

Bei den meisten gängigen Browsern führt eine Eingabe außerhalb und ohne Verbindung zu Formularen dazu, dass der Browser denkt, dass keine Übermittlung erfolgt ist. In diesem Fall müssten Sie für Ihre Anmeldung eine reine JS-Validierung verwenden, und eine Verschlüsselung Ihrer Passwörter wäre ebenfalls erforderlich.

Vor:

<form action="..."><input type="password"/></form>

Nach dem:

<input type="password"/>
Cannizid
quelle
1
Dies ist übrigens ein Trick, den Sie wahrscheinlich nicht anwenden sollten. Wenn Sie kein Formular-Tag verwenden, wird Ihr Code standardmäßig zu HTML4 und erschwert die Überprüfung der Konten Ihrer Benutzer.
Cannicide
0

Ich habe die folgenden Arbeiten auf Firefox und Chrome gefunden.

<form ... > <!-- more stuff -->
<input name="person" type="text" size=30 value="">
<input name="mypswd" type="password" size=6 value="" autocomplete="off">
<input name="userid" type="text" value="security" style="display:none">
<input name="passwd" type="password" value="faker" style="display:none">
<!-- more stuff --> </form>

Alle diese befinden sich im Formularbereich. "person" und "mypswd" sind das, was Sie wollen, aber der Browser speichert "userid" und "passwd" einmal und nie wieder, da sie sich nicht ändern. Sie können das Feld "Person" entfernen, wenn Sie es nicht wirklich benötigen. In diesem Fall ist alles, was Sie wollen, das Feld "mypswd", das sich auf eine Weise ändern kann, die dem Benutzer Ihrer Webseite bekannt ist.

Dick Guertin
quelle
0

Die einzige Möglichkeit, Firefox, Edge und Internet Explorer dazu zu bringen, die automatische Vervollständigung zu deaktivieren, besteht darin, autocomplete = "false" in meine Formularanweisung einzufügen, z.

  <form action="postingpage.php" autocomplete="false" method="post">

und ich muss die automatische Vervollständigung = "aus" zu meiner Formulareingabe hinzufügen und den Typ in Text ändern.

     <input type="text" autocomplete="off">

Es scheint, dass dieser HTML-Code mit den Browsern standardisiert werden muss. Das Formular Typ = Passwort sollte überarbeitet werden, damit die Browsereinstellungen überschrieben werden. Das einzige Problem, das ich habe, ist, dass ich meine Eingabemaskierung verloren habe. Aber auf der positiven Seite taucht das nervige "Diese Seite ist nicht sicher" in Firefox nicht auf.

Für mich ist es keine große Sache, da der Benutzer bereits authentifiziert ist und mein Benutzername und Passwort geändert werden

drtechno
quelle
2
MACH DAS NICHT. Die Daten werden weiterhin im Klartext über das Netzwerk gesendet. Dies ist in erster Linie das gesamte Problem mit HTTP (nicht HTTPS), daher Ihre "nervige" Warnmeldung. Es macht keinen Unterschied, dass der Benutzer bereits authentifiziert ist, da ein Man In The Middle die Klartextdaten weiterhin sehen kann und die serverseitige Protokollierung möglicherweise anders konfiguriert ist (könnte die Anforderungsheader speichern, während es insgesamt andere Probleme gibt, wenn POST gespeichert worden wäre Daten unter HTTPS).
Jacob
https verschlüsselt den Verkehr. Wenn Sie dies als Teil einer öffentlichen Internetanwendung verwenden, tun Sie dies trotzdem. Die Post-Methode verhindert Lesezeichen und mehrere Iframes von PHP-Code in einem HTML-Code verhindern das Einfügen von URLs. Technisch gesehen sollten Sie Ihren vollständigen Pfad eingeben. Wenn Sie bereitstellen, würde ich empfehlen, eine $ _SESSION-Variable mit der Basis-URL zu laden, die in Text geschrieben ist, anstatt $ _SERVER-Variablen zu betrachten. $ _SERVER ['HTTP_HOST'] und $ _SERVER ['PHP_SELF'] sollten nur in nicht öffentlichen Umgebungen verwendet werden, da beide mehrere Exploits haben.
Drtechno
Übrigens, mein Beispiel ist für geschlossene Systeme, die in keiner Weise mit dem Internet verbunden sind
drtechno
Niemand hat die Verwendung eines mit "java onclick" ausgeführten Encyption-Schemas angesprochen und das Formular nach der Verschlüsselungsroutine gesendet.
Drtechno