Frage

Eine der Freuden der Arbeit für eine staatliche Gesundheitsbehörde besteht darin, sich mit der ganzen Paranoia rund um den Umgang mit PHI (Protected Health Information) auseinandersetzen zu müssen.Verstehen Sie mich nicht falsch, ich bin dafür, alles zu tun, um die persönlichen Daten der Menschen zu schützen (Gesundheit, Finanzen, Surfgewohnheiten usw.), aber manchmal werden die Leute etwas zu nervös.

Ein typisches Beispiel:Einer unserer Landeskunden hat kürzlich herausgefunden, dass der Browser die praktische Funktion zum Speichern Ihres Passworts bietet.Wir alle wissen, dass es das schon seit einiger Zeit gibt und völlig optional ist und dem Endbenutzer überlassen bleibt, ob es eine kluge Entscheidung ist, es zu verwenden oder nicht.Allerdings herrscht im Moment ein wenig Aufruhr und wir werden aufgefordert, einen Weg zu finden, diese Funktionalität für unsere Website zu deaktivieren.

Frage:Gibt es eine Möglichkeit für eine Website, den Browser anzuweisen, die Speicherung von Passwörtern nicht anzubieten?Ich beschäftige mich schon lange mit der Webentwicklung, weiß aber nicht, dass ich damit schon einmal in Berührung gekommen bin.

Jede Hilfe wird geschätzt.

War es hilfreich?

Lösung

Ich bin nicht sicher, ob es in allen Browsern funktioniert, aber Sie sollten versuchen, autocomplete="off" im Formular festzulegen.

<form id="loginForm" action="login.cgi" method="post" autocomplete="off">

Der einfachste und einfachste Weg, Formular zu deaktivieren und Eingabeaufforderungen zur Passwortspeicherung Um zu verhindern, dass Formulardaten im Sitzungsverlauf zwischengespeichert werden, verwenden Sie das Formularelementattribut für die automatische Vervollständigung mit dem Wert „aus“.

Aus http://developer.mozilla.org/En/How_to_Turn_Off_Form_Autocompletion

Einige kleinere Untersuchungen zeigen, dass dies im IE funktioniert, aber ich gebe keine Garantien ;)

@Joseph:Wenn es eine strikte Anforderung ist, die XHTML-Validierung mit dem eigentlichen Markup zu bestehen (ich weiß allerdings nicht, warum das so ist), könnten Sie dieses Attribut theoretisch nachträglich mit Javascript hinzufügen, aber dann Benutzer mit deaktiviertem js (wahrscheinlich ein vernachlässigbarer Teil Ihrer Benutzerbasis oder null, wenn Ihre Passwörter werden weiterhin gespeichert.

Beispiel mit jQuery:

$('#loginForm').attr('autocomplete', 'off');

Andere Tipps

Ich hatte schon seit einiger Zeit mit diesem Problem zu kämpfen, mit einer einzigartigen Wendung des Problems.Privilegierte Benutzer konnten die gespeicherten Passwörter nicht für sich nutzen, normale Benutzer benötigten sie jedoch.Dies bedeutete, dass sich privilegierte Benutzer zweimal anmelden mussten, wobei beim zweiten Mal keine gespeicherten Passwörter erzwungen wurden.

Mit dieser Anforderung ist der Standard autocomplete="off" Die Methode funktioniert nicht in allen Browsern, da das Passwort möglicherweise bei der ersten Anmeldung gespeichert wurde.Ein Kollege hat eine Lösung gefunden, um das Kennwortfeld, als es fokussiert war, durch ein neues Kennwortfeld zu ersetzen und sich dann auf das neue Kennwortfeld zu konzentrieren (und dann denselben Ereignishandler anzuschließen).Das hat funktioniert (außer dass es in IE6 eine Endlosschleife verursacht hat).Vielleicht gab es einen Weg, das zu umgehen, aber es verursachte bei mir Migräne.

Schließlich habe ich versucht, den Benutzernamen und das Passwort einfach außerhalb des Formulars anzugeben.Zu meiner Überraschung hat das funktioniert!Es funktionierte unter IE6 und aktuellen Versionen von Firefox und Chrome unter Linux.Ich habe es nicht weiter getestet, aber ich vermute, dass es in den meisten, wenn nicht allen Browsern funktioniert (aber es würde mich nicht überraschen, wenn es da draußen einen Browser gäbe, dem es egal wäre, wenn kein Formular vorhanden wäre).

Hier ist ein Beispielcode zusammen mit etwas jQuery, damit es funktioniert:

<input type="text" id="username" name="username"/>
<input type="password" id="password" name="password"/>

<form id="theForm" action="/your/login" method="post">
  <input type="hidden" id="hiddenUsername" name="username"/>
  <input type="hidden" id="hiddenPassword" name="password"/>
  <input type="submit" value="Login"/>
</form>

<script type="text/javascript" language="JavaScript">
  $("#theForm").submit(function() {
    $("#hiddenUsername").val($("#username").val());
    $("#hiddenPassword").val($("#password").val());
  });
  $("#username,#password").keypress(function(e) {
    if (e.which == 13) {
      $("#theForm").submit();
    }
  });
</script>

Benutz einfach

readonly onfocus="this.removeAttribute('readonly');"

zusätzlich zu

Autovervollständigung = „aus“

zu den Eingaben, an die Sie sich keine Formulardaten merken möchten (username, password, usw.), wie unten gezeigt:

<input type="text" name="UserName" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

<input type="password" name="Password" autocomplete="off" readonly 
    onfocus="this.removeAttribute('readonly');" >

Getestet mit den neuesten Versionen der wichtigsten Browser, d. h. Google Chrome, Mozilla Firefox, Microsoft Edge, usw.und funktioniert wie ein Zauber.Hoffe das hilft...

Nun, es ist ein sehr alter Beitrag, aber ich werde trotzdem meine Lösung nennen, nach der mein Team schon lange gesucht hat.Wir haben gerade ein neues Eingabefeld vom Typ „Passwort“ in das Formular eingefügt, es in „div“ eingeschlossen und das „div“ ausgeblendet.Stellen Sie sicher, dass dieses Div vor der eigentlichen Passworteingabe steht.Das hat bei uns funktioniert und es gab keine Option zum Speichern des Passworts

Plunk - http://plnkr.co/edit/xmBR31NQMUgUhYHBiZSg?p=preview

HTML:

<form method="post" action="yoururl">
      <div class="hidden">
        <input type="password"/>
      </div>
      <input type="text" name="username" placeholder="username"/>
      <input type="password" name="password" placeholder="password"/>
    </form>

CSS:

.hidden {display:none;}

Sie können verhindern, dass der Browser die Formulare zuordnet, indem Sie den Namen, der für das Passwortfeld bei jeder Anzeige verwendet wird, zufällig auswählen.Dann sieht der Browser ein Passwort für dieselbe URL, kann aber nicht sicher sein, dass es das ist selbe Passwort.Vielleicht steuert es etwas anderes.

Aktualisieren: Beachten Sie, dass dies der Fall sein sollte zusätzlich zu Verwendung der automatischen Vervollständigung oder anderer Taktiken, die diese nicht ersetzen, aus den von anderen genannten Gründen.

Beachten Sie auch, dass dies nur dazu führt, dass der Browser daran gehindert wird automatische Vervollständigung das Passwort.Es wird es nicht verhindern Speicherung das Passwort in beliebiger Sicherheitsstufe, die der Browser verwendet.

Verwenden Sie echt Zwei-Faktor-Authentifizierung um die alleinige Abhängigkeit von Passwörtern zu vermeiden, die möglicherweise an viel mehr Orten als dem Browser-Cache des Benutzers gespeichert sind.

Der sauberste Weg ist die Verwendung autocomplete="off" Tag -Attribut, aber Firefox befolgt es nicht ordnungsgemäß, wenn Sie Felder mit der Registerkarte wechseln.

Die einzige Möglichkeit, dies zu verhindern, besteht darin, ein gefälschtes verstecktes Passwortfeld hinzuzufügen, das den Browser dazu verleitet, das Passwort dort einzugeben.

<input type="text" id="username" name="username"/>
<input type="password" id="prevent_autofill" autocomplete="off" style="display:none" tabindex="-1" />
<input type="password" id="password" autocomplete="off" name="password"/>

Es ist ein hässlicher Hack, da Sie das Browserverhalten ändern, was als schlechte Praxis angesehen werden sollte.Benutzen Sie es nur, wenn Sie es wirklich brauchen.

Notiz:Dadurch wird das automatische Ausfüllen von Passwörtern effektiv gestoppt, da FF den Wert von „speichert“. #prevent_autofill (das leer ist) und wird versuchen, dort alle gespeicherten Passwörter zu füllen, da immer das erste verwendet wird type="password" Eingabe, die es im DOM nach der entsprechenden Eingabe „Benutzername“ findet.

Ich habe das Hinzufügen von autocomplete="off" im Formular-Tag in allen gängigen Browsern getestet.Tatsächlich verwenden die meisten Menschen in den USA bisher IE8.

  1. IE8, IE9, IE10, Firefox, Safari funktionieren einwandfrei.

    Browser fragt nicht nach „Passwort speichern“.Außerdem wurden zuvor gespeicherter Benutzername und Passwort nicht ausgefüllt.

  2. Chrome und IE 11 unterstützen die Autocomplete="off"-Funktion nicht
  3. FF unterstützt die automatische Vervollständigung = „off“.Aber manchmal sind vorhandene gespeicherte Anmeldeinformationen besiedelt.

Aktualisiert am 11. Juni 2014

Abschließend finden Sie unten eine browserübergreifende Lösung mit Javascript, die in allen Browsern einwandfrei funktioniert.

Das Tag „form“ muss im Anmeldeformular entfernt werden.Geben Sie diese Anmeldeinformationen nach der clientseitigen Validierung in versteckter Form ein und übermitteln Sie sie.

Fügen Sie außerdem zwei Methoden hinzu.eine für die Validierung „validateLogin()“ und eine andere zum Abhören des Eingabeereignisses, während Sie in Textfeld/Passwort/Schaltfläche „checkAndSubmit()“ auf die Eingabetaste klicken.Da das Anmeldeformular jetzt kein Formular-Tag hat, geben Sie hier das Ereignis ein, das nicht funktioniert.

HTML

<form id="HiddenLoginForm" action="" method="post">
<input type="hidden" name="username" id="hidden_username" />
<input type="hidden" name="password" id="hidden_password" />
</form>

Username: <input type="text" name="username" id="username" onKeyPress="return checkAndSubmit(event);" /> 
Password: <input type="text" name="password" id="password" onKeyPress="return checkAndSubmit(event);" /> 
<input type="button" value="submit" onClick="return validateAndLogin();" onKeyPress="return checkAndSubmit(event);" /> 

Javascript

//For validation- you can modify as you like
function validateAndLogin(){
  var username = document.getElementById("username");
  var password = document.getElementById("password");

  if(username  && username.value == ''){
    alert("Please enter username!");
    return false;
  }

  if(password && password.value == ''){
    alert("Please enter password!");
    return false;
  }

  document.getElementById("hidden_username").value = username.value;
  document.getElementById("hidden_password").value = password.value;
  document.getElementById("HiddenLoginForm").submit();
}

//For enter event
function checkAndSubmit(e) {
 if (e.keyCode == 13) {
   validateAndLogin();
 }
}

Viel Glück!!!

Nicht wirklich – das Einzige, was Sie realistischerweise tun könnten, wäre, auf der Website Ratschläge anzubieten;Vielleicht könnten Sie ihnen vor der ersten Anmeldung ein Formular mit der Information zeigen, dass es nicht empfehlenswert ist, dem Browser das Speichern des Passworts zu erlauben.

Dann folgt der Benutzer sofort dem Rat, notiert das Passwort auf einem Post-it und klebt es auf seinen Monitor.

Was ich getan habe, ist eine Kombination aus Autocomplete="off" und dem Löschen von Passwortfeldern mithilfe von Javascript/jQuery.

jQuery-Beispiel:

$(function() { 
    $('#PasswordEdit').attr("autocomplete", "off");
    setTimeout('$("#PasswordEdit").val("");', 50); 
});

Durch die Nutzung setTimeout() Sie können warten, bis der Browser das Feld ausgefüllt hat, bevor Sie es löschen. Andernfalls führt der Browser immer eine automatische Vervollständigung durch, nachdem Sie das Feld gelöscht haben.

Wenn autocomplete="off" nicht funktioniert, entfernen Sie das Formular-Tag und verwenden Sie stattdessen ein div-Tag. Übergeben Sie dann die Formularwerte mithilfe von JQuery an den Server.Das hat bei mir funktioniert.

Da autocomplete="off" für Passwortfelder nicht funktioniert, muss man sich auf Javascript verlassen.Hier ist eine einfache Lösung, die auf den hier gefundenen Antworten basiert.

Fügen Sie das Attribut data-password-autocomplete="off" zu Ihrem Passwortfeld hinzu:

<input type="password" data-password-autocomplete="off">

Fügen Sie das folgende JS ein:

$(function(){
    $('[data-password-autocomplete="off"]').each(function() {
        $(this).prop('type', 'text');
        $('<input type="password"/>').hide().insertBefore(this);
        $(this).focus(function() {
            $(this).prop('type', 'password');
        });
    });     
});

Diese Lösung funktioniert sowohl für Chrome als auch für FF.

Nur damit es den Leuten klar ist: Das Attribut „Autovervollständigung“ funktioniert in den meisten Fällen, aber erfahrene Benutzer können es mithilfe eines Lesezeichens umgehen.

Wenn Sie Ihre Passwörter in einem Browser speichern, erhöht sich tatsächlich der Schutz vor Keylogging. Daher ist es möglicherweise die sicherste Option, Passwörter im Browser zu speichern, sie aber mit einem Master-Passwort zu schützen (zumindest in Firefox).

Ich habe eine Lösung, die helfen könnte.

Sie könnten einen benutzerdefinierten Schriftarten-Hack erstellen.Erstellen Sie also eine benutzerdefinierte Schriftart, bei der alle Zeichen beispielsweise als Punkt/Kreis/Stern vorliegen.Verwenden Sie diese als benutzerdefinierte Schriftart für Ihre Website.Sehen Sie sich an, wie das in Inkscape geht: wie Sie Ihre eigene Schriftart erstellen

Geben Sie dann in Ihrem Anmeldeformular Folgendes ein:

<form autocomplete='off'  ...>
   <input type="text" name="email" ...>
   <input type="text" name="password" class="password" autocomplete='off' ...>
   <input type=submit>
</form>

Fügen Sie dann Ihr CSS hinzu:

@font-face {
    font-family: 'myCustomfont';
    src: url('myCustomfont.eot');
    src: url('myCustomfont?#iefix') format('embedded-opentype'),
         url('myCustomfont.woff') format('woff'),
         url('myCustomfont.ttf') format('truetype'),
         url('myCustomfont.svg#myCustomfont') format('svg');
    font-weight: normal;
    font-style: normal;

}
.password {
  font-family:'myCustomfont';
}

Ziemlich browserübergreifend kompatibel.Ich habe IE6+, FF, Safari und Chrome ausprobiert.Stellen Sie einfach sicher, dass die von Ihnen konvertierte OET-Schriftart nicht beschädigt wird.Ich hoffe es hilft?

Markus hat einen tollen Punkt angesprochen.Ich beschloss, nachzuschauen autocomplete Attribut und habe Folgendes erhalten:

Der einzige Nachteil bei der Verwendung dieses Attributs ist, dass es nicht Standard ist (es funktioniert in IE- und Mozilla -Browsern) und würde die XHTML -Validierung scheitern lassen.Ich denke, dies ist jedoch ein Fall, in dem es jedoch vernünftig ist, die Validierung zu brechen. (Quelle)

Ich muss also sagen, dass es zwar nicht überall zu 100 % funktioniert, es aber in den gängigen Browsern funktioniert, also eine tolle Lösung ist.

Der einfachste Weg, dieses Problem zu lösen, besteht darin, INPUT-Felder außerhalb des FORM-Tags zu platzieren und zwei versteckte Felder innerhalb des FORM-Tags hinzuzufügen.Kopieren Sie dann in einem Submit-Ereignis-Listener Werte von den sichtbaren Eingaben in die unsichtbaren, bevor die Formulardaten an den Server übermittelt werden.

Hier ist ein Beispiel (Sie können es hier nicht ausführen, da die Formularaktion nicht auf ein echtes Anmeldeskript eingestellt ist):

<!doctype html>
<html>
<head>
  <title>Login & Save password test</title>
  <meta charset="utf-8">
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>

  <body>
      <!-- the following fields will show on page, but are not part of the form -->
      <input class="username" type="text" placeholder="Username" />
      <input class="password" type="password" placeholder="Password" />

      <form id="loginForm" action="login.aspx" method="post">
        <!-- thw following two fields are part of the form, but are not visible -->
        <input name="username" id="username" type="hidden" />
        <input name="password" id="password" type="hidden" />
        <!-- standard submit button -->
        <button type="submit">Login</button>
      </form>

    <script>
      // attache a event listener which will get called just before the form data is sent to server
      $('form').submit(function(ev) {
        console.log('xxx');
        // read the value from the visible INPUT and save it to invisible one
        // ... so that it gets sent to the server
        $('#username').val($('.username').val());
        $('#password').val($('.password').val());
      });
    </script>

  </body>
</html>

Meine Problemumgehung für js (jquery) besteht darin Ändern Sie den Passworteingabetyp in „Text beim Absenden des Formulars“..Das Passwort könnte für eine Sekunde sichtbar werden, daher verstecke ich auch die Eingabe kurz davor. Ich würde dies lieber nicht für Anmeldeformulare verwenden, aber es ist nützlich (zusammen mit autocomplete="off"), zum Beispiel im Administrationsbereich der Website.

Versuchen Sie, dies in eine Konsole (mit JQuery) einzufügen, bevor Sie das Formular absenden.

$('form').submit(function(event) {
    $(this).find('input[type=password]').css('visibility', 'hidden').attr('type', 'text');
});

Getestet auf Chrome 44.0.2403.157 (64-Bit).

Ich habe es oben versucht autocomplete="off" und doch alles gelungen.Wenn Sie Angular JS verwenden, empfehle ich die Verwendung von Button und NG-Click.

<button type="button" class="" ng-click="vm.login()" />

Dies hat bereits eine akzeptierte Antwort. Ich füge diese hinzu, wenn jemand das Problem mit der akzeptierten Antwort nicht lösen kann, kann er meinen Mechanismus verwenden.

Danke für die Frage und die Antworten.

Ich habe viele Lösungen getestet.Dynamischer Passwortfeldname, mehrere Passwortfelder (unsichtbar für gefälschte), Änderung des Eingabetyps von „Text“ in „Passwort“, Autovervollständigung = „aus“, Autovervollständigung = „neues Passwort“, ...aber nichts hat es mit einem aktuellen Browser gelöst.

Um die Passwort-Erinnerung loszuwerden, habe ich schließlich das Passwort als Eingabefeld behandelt und den eingegebenen Text „unscharf“ gemacht.

Es ist weniger „sicher“ als ein natives Passwortfeld, da bei Auswahl des eingegebenen Textes zwar Klartext angezeigt wird, das Passwort jedoch nicht gespeichert wird.Es kommt auch darauf an, dass Javascript aktiviert ist.

Sie können das Risiko abschätzen, das mit der Verwendung des folgenden Vorschlags im Vergleich zur Option „Passwort merken“ des Navigators verbunden ist.

Während die Passwortspeicherung vom Benutzer verwaltet (pro Site deaktiviert) werden kann, ist dies für einen Personalcomputer in Ordnung, nicht für einen „öffentlichen“ oder gemeinsam genutzten Computer.

In meinem Fall handelt es sich um ein ERP, das auf gemeinsam genutzten Computern ausgeführt wird. Deshalb werde ich meine Lösung unten ausprobieren.

<input style="background-color: rgb(239, 179, 196); color: black; text-shadow: none;" name="password" size="10" maxlength="30" onfocus="this.value='';this.style.color='black'; this.style.textShadow='none';" onkeypress="this.style.color='transparent'; this.style.textShadow='1px 1px 6px green';" autocomplete="off" type="text">

Eine Möglichkeit, die ich kenne, besteht darin, (zum Beispiel) JavaScript zu verwenden, um den Wert aus dem Passwortfeld zu kopieren, bevor das Formular abgeschickt wird.

Das Hauptproblem dabei ist, dass die Lösung an JavaScript gebunden ist.

Wenn es jedoch an JavaScript gebunden werden kann, können Sie das Passwort genauso gut auf der Clientseite hashen, bevor Sie eine Anfrage an den Server senden.

Das eigentliche Problem liegt viel tiefer als nur das Hinzufügen von Attributen zu Ihrem HTML – das ist ein weit verbreitetes Sicherheitsrisiko, deshalb haben Leute aus Sicherheitsgründen Hardwareschlüssel und andere verrückte Dinge erfunden.

Stellen Sie sich vor, dass autocomplete="off" in allen Browsern perfekt funktioniert.Würde das der Sicherheit helfen?Natürlich nicht.Benutzer notieren ihre Passwörter in Lehrbüchern, auf Aufklebern, die sie an ihrem Monitor befestigen, damit jeder Bürobesucher sie sehen kann, speichern sie in Textdateien auf dem Desktop und so weiter.

Im Allgemeinen sind Webanwendungen und Webentwickler in keiner Weise für die Sicherheit der Endbenutzer verantwortlich.Endnutzer können sich nur selbst schützen.Im Idealfall MÜSSEN sie alle Passwörter im Kopf behalten und die Funktion zum Zurücksetzen des Passworts nutzen (oder sich an den Administrator wenden), falls sie es vergessen haben.Andernfalls besteht immer die Gefahr, dass das Passwort eingesehen und irgendwie gestohlen wird.

Entweder haben Sie eine verrückte Sicherheitsrichtlinie mit Hardwareschlüsseln (wie einige Banken Internet-Banking anbieten, bei dem grundsätzlich eine Zwei-Faktor-Authentifizierung zum Einsatz kommt) oder es besteht grundsätzlich KEINE SICHERHEIT.Nun, das ist natürlich etwas übertrieben.Es ist wichtig zu verstehen, wovor Sie sich schützen möchten:

  1. Nicht autorisierter Zugriff.Im Grunde reicht das einfachste Anmeldeformular aus.Manchmal werden zusätzliche Maßnahmen wie zufällige Sicherheitsfragen, CAPTCHAs, Passworthärtung usw. ergriffen.
  2. Ausspionieren von Ausweisen.HTTPS ist ein MUSS, wenn Personen über öffentliche WLAN-Hotspots usw. auf Ihre Webanwendung zugreifen.Erwähnen Sie, dass Ihre Benutzer ihre Passwörter auch bei Verwendung von HTTPS regelmäßig ändern müssen.
  3. Insider-Angriff.Dafür gibt es zwei viele Beispiele, angefangen beim einfachen Diebstahl Ihrer Passwörter aus dem Browser oder von Passwörtern, die Sie irgendwo auf dem Schreibtisch notiert haben (erfordert keine IT-Kenntnisse) und endend mit der Sitzungsfälschung und dem Abfangen des lokalen Netzwerkverkehrs (sogar verschlüsselt). und weiterhin auf die Webanwendung zugreifen, als wäre es ein anderer Endbenutzer.

In diesem speziellen Beitrag sehe ich unzureichende Anforderungen an den Entwickler, die er aufgrund der Art des Problems – der Endbenutzersicherheit – nie lösen kann.Mein subjektiver Punkt ist, dass Entwickler grundsätzlich NEIN sagen und auf das Anforderungsproblem hinweisen sollten, anstatt Zeit mit solchen Aufgaben zu verschwenden, ehrlich gesagt.Dadurch wird Ihr System nicht unbedingt sicherer, sondern es kommt eher zu Fällen mit Aufklebern auf Monitoren.Leider hören manche Chefs nur das, was sie hören wollen.Wenn ich Sie wäre, würde ich jedoch versuchen zu erklären, woher das eigentliche Problem kommt und dass autocomplete="off" es nicht lösen würde, es sei denn, es zwingt Benutzer dazu, alle ihre Passwörter ausschließlich im Kopf zu behalten!Der Entwickler seinerseits kann Benutzer nicht vollständig schützen. Benutzer müssen wissen, wie sie das System verwenden, dürfen aber gleichzeitig ihre sensiblen/sicheren Informationen nicht preisgeben, und das geht weit über die Authentifizierung hinaus.

Ich stehe vor dem gleichen HIPAA-Problem und habe eine relativ einfache Lösung gefunden.

  1. Erstellen Sie ein verstecktes Passwortfeld mit dem Feldnamen als Array.

    <input type="password" name="password[]" style="display:none" />
    
  2. Verwenden Sie dasselbe Array für das eigentliche Passwortfeld.

    <input type="password" name="password[]" />
    

Der Browser (Chrome) fordert Sie möglicherweise auf, „Passwort speichern“. Unabhängig davon, ob der Benutzer „Speichern“ auswählt, wird das Passwort bei der nächsten Anmeldung automatisch in das ausgeblendete Passwortfeld, also den Nullplatz im Array, eingefügt und der erste Platz bleibt leer.

Ich habe versucht, das Array zu definieren, z. B. „Passwort[Teil2]“, aber es erinnerte sich immer noch.Ich denke, es wirft es ab, wenn es ein nicht indiziertes Array ist, weil es keine andere Wahl hat, als es an erster Stelle zu löschen.

Anschließend verwenden Sie die Programmiersprache Ihrer Wahl, um auf das Array zuzugreifen, beispielsweise PHP.

echo $_POST['password'][1];

Da die meisten autocomplete Vorschläge, einschließlich der akzeptierten Antwort, funktionieren in heutigen Webbrowsern nicht (d. h.Webbrowser-Passwort-Manager ignorieren autocomplete), eine neuartigere Lösung ist der Wechsel zwischen password Und text Typen und sorgen dafür, dass die Hintergrundfarbe mit der Textfarbe übereinstimmt, wenn es sich bei dem Feld um ein einfaches Textfeld handelt, wodurch das Passwort weiterhin ausgeblendet wird, während es sich um ein echtes Passwortfeld handelt, wenn der Benutzer (oder ein Programm wie KeePass) ein Passwort eingibt.Browser verlangen nicht, Passwörter zu speichern, die in Klartextfeldern gespeichert sind.

Der Vorteil dieses Ansatzes besteht darin, dass er eine progressive Erweiterung ermöglicht und daher kein Javascript erforderlich ist, damit ein Feld als normales Passwortfeld funktioniert (Sie könnten stattdessen auch mit einem Nur-Text-Feld beginnen und den gleichen Ansatz anwenden, aber das ist nicht wirklich HIPAA PHI/PII-konform).Dieser Ansatz hängt auch nicht von versteckten Formularen/Feldern ab, die möglicherweise nicht unbedingt an den Server gesendet werden (da sie versteckt sind), und einige dieser Tricks funktionieren auch in einigen modernen Browsern nicht.

jQuery-Plugin:

https://github.com/cubiclesoft/php-flexforms-modules/blob/master/password-manager/jquery.stoppasswordmanager.js

Relevanter Quellcode aus dem obigen Link:

(function($) {
$.fn.StopPasswordManager = function() {
    return this.each(function() {
        var $this = $(this);

        $this.addClass('no-print');
        $this.attr('data-background-color', $this.css('background-color'));
        $this.css('background-color', $this.css('color'));
        $this.attr('type', 'text');
        $this.attr('autocomplete', 'off');

        $this.focus(function() {
            $this.attr('type', 'password');
            $this.css('background-color', $this.attr('data-background-color'));
        });

        $this.blur(function() {
            $this.css('background-color', $this.css('color'));
            $this.attr('type', 'text');
            $this[0].selectionStart = $this[0].selectionEnd;
        });

        $this.on('keydown', function(e) {
            if (e.keyCode == 13)
            {
                $this.css('background-color', $this.css('color'));
                $this.attr('type', 'text');
                $this[0].selectionStart = $this[0].selectionEnd;
            }
        });
    });
}
}(jQuery));

Demo:

https://barebonescms.com/demos/admin_pack/admin.php

Klicken Sie im Menü auf „Eintrag hinzufügen“ und scrollen Sie dann zum Ende der Seite zu „Modul:Stoppen Sie den Passwort-Manager.

Haftungsausschluss:Während dieser Ansatz für sehende Personen funktioniert, kann es zu Problemen mit der Screenreader-Software kommen.Beispielsweise könnte ein Bildschirmleser das Passwort des Benutzers laut vorlesen, weil er ein Nur-Text-Feld sieht.Die Verwendung des oben genannten Plugins kann auch andere unvorhergesehene Folgen haben.Das Ändern der integrierten Webbrowser-Funktionalität sollte sparsam erfolgen und eine Vielzahl von Bedingungen und Grenzfällen testen.

Gibt es eine Möglichkeit für eine Website, den Browser anzuweisen, die Speicherung von Passwörtern nicht anzubieten?

Die Website teilt dem Browser mit, dass es sich um ein Passwort handelt <input type="password">.Also wenn du muss Wenn Sie dies aus der Website-Perspektive tun, müssten Sie das ändern.(Das empfehle ich natürlich nicht).

Die beste Lösung wäre, den Benutzer seinen Browser so konfigurieren zu lassen, dass er sich keine Passwörter merkt.

Wenn Sie dem Autocomplete-Flag nicht vertrauen möchten, können Sie mithilfe des onchange-Ereignisses sicherstellen, dass der Benutzer in das Feld eingibt.Der folgende Code ist ein einfaches HTML-Formular.Das versteckte Formularelement „password_edited“ ist zu Beginn auf 0 gesetzt.Wenn der Wert des Passworts geändert wird, ändert das JavaScript oben (Funktion pw_edited) den Wert auf 1.Wenn die Schaltfläche gedrückt wird, wird vor dem Absenden des Formulars der hier eingegebene Wert überprüft.Selbst wenn der Browser Sie ignoriert und das Feld automatisch vervollständigt, kann der Benutzer auf diese Weise die Anmeldeseite nicht passieren, ohne das Kennwortfeld einzugeben.Stellen Sie außerdem sicher, dass das Kennwortfeld leer ist, wenn der Fokus festgelegt ist.Andernfalls können Sie am Ende ein Zeichen hinzufügen und es dann wieder entfernen, um das System auszutricksen.Ich empfehle, zusätzlich autocomplete="off" zum Passwort hinzuzufügen, aber dieses Beispiel zeigt, wie der Backup-Code funktioniert.

<html>
  <head>
    <script>
      function pw_edited() {
        document.this_form.password_edited.value = 1;
      }
      function pw_blank() {
        document.this_form.password.value = "";
      }
      function submitf() {
        if(document.this_form.password_edited.value < 1) {
          alert("Please Enter Your Password!");
        }
        else {
         document.this_form.submit();
        }
      }
    </script>
  </head>
  <body>
    <form name="this_form" method="post" action="../../cgi-bin/yourscript.cgi?login">
      <div style="padding-left:25px;">
        <p>
          <label>User:</label>
          <input name="user_name" type="text" class="input" value="" size="30" maxlength="60">
        </p>
        <p>
          <label>Password:</label>
          <input name="password" type="password" class="input" size="20" value="" maxlength="50" onfocus="pw_blank();" onchange="pw_edited();">
        </p>
        <p>
          <span id="error_msg"></span>
        </p>
        <p>
          <input type="hidden" name="password_edited" value="0">
          <input name="submitform" type="button" class="button" value="Login" onclick="return submitf();">
        </p>
      </div>
    </form>
  </body>
</html>

autocomplete="off" funktioniert nicht zum Deaktivieren des Passwort-Managers in Firefox 31 und höchstwahrscheinlich auch nicht in einigen früheren Versionen.

Sehen Sie sich die Diskussion bei Mozilla zu diesem Problem an:https://bugzilla.mozilla.org/show_bug.cgi?id=956906

Wir wollten ein zweites Passwortfeld verwenden, um ein durch einen Token generiertes Einmalpasswort einzugeben.Jetzt verwenden wir eine Texteingabe anstelle einer Passworteingabe.:-(

Mir wurde die ähnliche Aufgabe übertragen, das automatische Ausfüllen von Anmeldenamen und Passwörtern durch den Browser zu deaktivieren. Nach vielen Versuchen fand ich die folgende Lösung optimal.Fügen Sie einfach die folgenden Steuerelemente vor Ihren ursprünglichen Steuerelementen hinzu.

<input type="text" style="display:none">
<input type="text" name="OriginalLoginTextBox">

<input type="password" style="display:none">
<input type="text" name="OriginalPasswordTextBox">

Dies funktioniert gut für IE11 und Chrome 44.0.2403.107

autocomplete="off" funktioniert für die meisten modernen Browser, aber eine andere Methode, die ich verwendet habe und die erfolgreich mit Epiphany (einem WebKit-basierten Browser für GNOME) funktioniert hat, besteht darin, ein zufällig generiertes Präfix im Sitzungsstatus zu speichern (oder ein verstecktes Feld, das ich zufällig hatte). eine geeignete Variable im Sitzungsstatus) und verwenden Sie diese, um den Namen der Felder zu ändern.Epiphany möchte das Passwort immer noch speichern, aber wenn es zum Formular zurückkehrt, werden die Felder nicht ausgefüllt.

Ich hatte mit dieser Methode keine Probleme:

Verwenden Sie autocomplete="off", fügen Sie ein verstecktes Passwortfeld und dann ein weiteres nicht verstecktes hinzu.Der Browser versucht, das Versteckte automatisch zu vervollständigen, wenn autocomplete="off" nicht beachtet wird.

Eine andere Lösung besteht darin, den POST mithilfe eines versteckten Formulars zu erstellen, in dem alle Eingaben vom Typ „versteckt“ sind.Das sichtbare Formular verwendet Eingaben vom Typ „Passwort“.Das letztgenannte Formular wird niemals gesendet und daher kann der Browser den Anmeldevorgang überhaupt nicht abfangen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top