Pytanie Jak wyłączyć autouzupełnianie przeglądarki w formularzu web / field input?


Jak wyłączyć? autocomplete w głównych przeglądarkach dla konkretnego input (lub form field)?


2260
2017-08-05 16:22


pochodzenie


Jeszcze jedno użycie obejmuje formularze administracyjne do tworzenia lub edycji użytkowników; nie chcesz, aby formularz był wypełniony Twoimi aktualnymi danymi uwierzytelniającymi. Dotyczy to również formularzy zmiany hasła, szczególnie zaprojektowane jako pozostaw puste, aby zachować bieżące hasło. - Álvaro González
Innym powodem, dla którego chcesz to zrobić, jest hasło, captcha, a informacje o karcie kredytowej nie zostaną wypełnione. - Jeff Atwood
należy również pamiętać, że niektóre testy penetracyjne wymagają wyłączenia autouzupełniania na niektórych polach - Jeff Atwood
Proszę się nad tym zastanowić. Sensowne jest wyłączanie zapisywania informacji o karcie kredytowej itp., Ale jeśli nie jesteś bankiem, zapobieganie automatycznemu wypełnianiu hasła może znacznie zmniejszyć liczbę użytkowników, którzy logują się do Twojej witryny, szczególnie na telefonach, gdzie wprowadzanie haseł na ciasnych klawiaturach wymaga dużego wysiłku. - John Mellor
W innych sytuacjach może to być naprawdę ważne - np. W formularzach zarządzania użytkownikami - dodawanie / aktualizowanie użytkownika - prawie nigdy nie chcesz, aby hasła były automatycznie uzupełniane podczas administrowania zestawem użytkowników w dużym systemie. - Dave Amphlett


Odpowiedzi:


Firefox 30 ignoruje autocomplete="off" dla haseł, decydując się na monitowanie użytkownika, zamiast tego, czy hasło powinno być przechowywane na kliencie. Zwróć uwagę na poniższe komentarz od 5 maja 2014 r .:

  • Menedżer haseł zawsze pyta, czy chce zapisać hasło. Hasła nie są zapisywane bez zgody użytkownika.
  • Jesteśmy trzecią przeglądarką, która implementuje tę zmianę po IE i Chrome.

Według Dokumentacja dla programistów Mozilli atrybut elementu formularza autocomplete zapobiega buforowaniu danych formularzy w starszych przeglądarkach.

<input type="text" name="foo" autocomplete="off" />

2219
2017-08-05 16:24



To nie działa dla mnie w Firefoksie 3.0.3 Musiałem umieścić atrybut autouzupełniania w FORMIE zamiast INPUT. - Winston Fassett
Autouzupełnianie jest zdefiniowane tylko w standardach HTML 5, więc spowoduje przerwanie wszelkich walidacji przeprowadzanych względem HTML 4. * ... - Jrgns
@ Winston, powinieneś umieścić go zarówno na formularzu, jak i na samym elemencie wejściowym. W ten sposób pokryjesz wszystkie niestandardowe przeglądarki. - AviD
I pamiętaj, aby wyłączyć swoje autocomplete = on rozszerzenie (jeśli używasz przeglądarki Chrome) przed testowaniem aplikacji internetowej. Inaczej poczujesz się tak głupio jak ja. ;) - Jo Liss
autocomplete = "<wszystko oprócz włączania i wyłączania prac>" - swapab


Oprócz autocomplete=off, możesz również ustawić nazwy pól formularzy losowo według kodu, który generuje stronę, być może poprzez dodanie do końca nazw niektórych łańcuchów specyficznych dla sesji.

Po przesłaniu formularza możesz usunąć tę część przed przetworzeniem ich po stronie serwera. Zapobiegłoby to znajdowaniu przez kontekst przeglądarki kontekstu dla twojego pola, a także może pomóc w zapobieganiu atakom XSRF, ponieważ atakujący nie byłby w stanie odgadnąć nazw pól do przesłania formularza.


248
2017-10-20 13:36



Jest to znacznie lepsze rozwiązanie w porównaniu do autouzupełniania = "wyłączone". Wszystko, co musisz zrobić, to wygenerować nową nazwę na każdym ładowaniu strony i zapisać tę nazwę do $ _SESSION do wykorzystania w przyszłości: $_SESSION['codefield_name'] = md5(uniqid('auth', true)); - enchance
Nie, to nie jest lepsze rozwiązanie, ponieważ źródłem preferencji dla tego ustawienia jest agent użytkownika znany również jako przeglądarka internetowa. Istnieje różnica między obsługą pewnych zachowań (które HTML 5 próbuje zrobić) i wymuszaniem ich przez podejmowanie decyzji w imieniu użytkownika, co sugerujesz, jest "znacznie lepszym rozwiązaniem". - amn
To rozwiązanie może działać ze wszystkimi przeglądarkami, więc pod tym względem jest "lepsze". Mimo to, amn jest poprawne, decyzja o wyłączeniu autouzupełniania w imieniu użytkowników nie jest dobrym pomysłem. Oznacza to, że wyłączam autouzupełnianie tylko w bardzo specyficznych sytuacjach, na przykład gdy planujesz zbudować własną funkcję autouzupełniania i nie chcesz konfliktów lub dziwnych zachowań. - macguru2000
Jeśli chodzi o ataki XSRF, nie jestem pewien, jaki typ ataku widziałeś, ale czy atakujący nie mógł po prostu usunąć części końcowej w taki sam sposób, w jaki robisz to po stronie serwera, aby zidentyfikować pola? Lub, jeśli atakujący publikuje pola, czy nie mogliby dołączyć do nich własnego losowego ciągu, ponieważ zostanie on usunięty przez serwer? - xr280xr
@ macguru2000 budowanie własnego autouzupełniania to całkowicie legalny i powszechny przypadek użycia. Naprawdę przeglądarka powinna ułatwić programistom wyłączanie funkcji autouzupełniania, gdy trzeba, zamiast zmuszać nas do używania takich hacków jak ten - whoadave


Większość głównych przeglądarek i menedżerów haseł (poprawnie, IMHO) teraz ignoruje autocomplete=off.

Czemu? Dodano wiele banków i innych witryn o wysokim poziomie bezpieczeństwa autocomplete=off na ich stronach logowania "ze względów bezpieczeństwa", ale w rzeczywistości zmniejsza to bezpieczeństwo, ponieważ powoduje, że ludzie zmieniają hasła w tych witrynach o wysokim poziomie bezpieczeństwa, aby były łatwe do zapamiętania (i tym samym złamania), ponieważ autouzupełnianie zostało zerwane.

Dawno temu większość menedżerów haseł zaczęła ignorować autocomplete=off, a teraz przeglądarki zaczynają robić to samo tylko dla wejść użytkownika / hasła.

Niestety, błędy w implementacjach autouzupełniania wstawiają nazwę użytkownika i / lub hasło do niewłaściwych pól formularza, powodując błędy sprawdzania poprawności formularza lub, co gorsza, przypadkowo wstawiając nazwy użytkownika do pól, które zostały celowo pozostawione puste przez użytkownika.

Co powinien zrobić programista internetowy?

  • Jeśli możesz samodzielnie zachować wszystkie pola hasła na stronie, jest to świetny początek, ponieważ wydaje się, że obecność pola hasła jest głównym wyzwalaczem dla autouzupełniania użytkowników / przebiegów do wkroczenia. W przeciwnym razie przeczytaj wskazówki poniżej.
  • Safari Zauważa, że ​​istnieją 2 pola hasła i wyłącza autouzupełnianie w tym przypadku, zakładając, że musi to być formularz zmiany hasła, a nie formularz logowania. Dlatego upewnij się, że używasz 2 pól hasła (nowe i potwierdź nowe) dla wszystkich dozwolonych formularzy
  • Chrom 34, niestety, spróbuje automatycznie wypełnić pola za pomocą użytkownika / hasła, gdy tylko zobaczy pole hasła. Jest to spory problem, który, mam nadzieję, zmieni zachowanie przeglądarki Safari. Jednak dodanie tego do górnej części formularza powoduje wyłączenie autouzupełniania hasła:

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

Nie zbadałem jeszcze dokładnie IE ani Firefox, ale z przyjemnością zaktualizuję odpowiedź, jeśli inni będą mieli informacje w komentarzach.


187
2018-04-23 04:00



co masz na myśli, mówiąc, że "dodanie tej strony na Twojej stronie wyłącza automatyczne wypełnianie strony:" - wutzebaer
@wutzebaer, Chrome zauważa pole ukrytego hasła i zatrzymuje automatyczne uzupełnianie. Podobno ma to zapobiec kradzieży strony z informacjami o haśle bez powiadomienia użytkownika. - David W
Twój fragment kodu zapobiega autouzupełnianiu pól logowania w przeglądarce Chrome, Firefox, IE 8 i IE 10. Nie przetestowałem IE 11. Dobre rzeczy! Tylko prosta odpowiedź, która wciąż działa. - Sam Watkins
Notatka o safari wydaje się działać również w Chrome, co najmniej od grudnia 2015 r. Miałem nazwę użytkownika i hasło w formularzu rejestracyjnym, który był autouzupełniany danymi z formularza logowania. Tworzenie dwóch type='password' pola na jednej stronie powodowały ignorowanie autouzupełniania "zapisz hasło" przeglądarki, co było całkiem sensowne, ponieważ formularze rejestracyjne zwykle proszą o podanie hasła dwukrotnie, gdy formularze logowania proszą o to tylko raz. - Matt Fletcher
Wygląda na to, że nie działa już w Chrome 55, chyba że dodatkowe pole hasła nie jest ukryte, co jest niezgodne z celem. - jokkedk


Czasami nawet autouzupełnianie = wyłączone by nie uniemożliwiają wypełnienia w poświadczeniach w niewłaściwych polach, ale nie w polu użytkownika ani pseudonimu.

To obejście jest dodatkiem do posta apinsteina o zachowaniu przeglądarki.

Napraw autouzupełnianie przeglądarki w trybie tylko do odczytu i ustaw zapisywalność na fokus (kliknij i kartę)

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

Aktualizacja: Mobile Safari ustawia kursor w polu, ale nie pokazuje wirtualnej klawiatury. Nowa poprawka działa jak poprzednio, ale obsługuje wirtualną klawiaturę:

<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
    this.removeAttribute('readonly');
    // fix for mobile safari to show virtual keyboard
    this.blur();    this.focus();  }" />

Live Demo https://jsfiddle.net/danielsuess/n0scguv6/

// UpdateEnd

Ponieważ przeglądarka automatycznie wypełnia poświadczenia w niewłaściwym polu tekstowym !?

Zauważyłem to dziwne zachowanie w Chrome i Safari, gdy są pola hasła ta sama forma. Domyślam się, że przeglądarka szuka pola hasła, aby wstawić zapisane poświadczenia. Następnie automatycznie wypełnia (tylko zgadywanie z powodu obserwacji) najbliższe pole tekstowe, które pojawia się przed polem hasła w DOM. Ponieważ przeglądarka jest ostatnią instancją i nie możesz jej kontrolować,

Ta poprawka tylko do odczytu poprawiła się dla mnie.


120
2018-06-16 16:04



Jeśli nie ma javascript, cała forma zawodzi. -1 - Jimmy Kane
@ JimmyKane kluczem byłoby również dodanie atrybutu przy użyciu javascript w pierwszej kolejności (czego dsuess tutaj nie zrobił, ale po prostu dodanie sake kompletności). - trnelson
@tmelson Rozumiem, ale nadal dlaczego używać js, aby wyłączyć? Uniknijmy js dla rzeczy, które można poprawić natywnie. Ponownie zgadzam się z tobą. - Jimmy Kane
To nie działa poprawnie w IE8, pole hasła tylko do odczytu nie jest edytowalne przy pierwszym ustawieniu ostrości, tylko po nieostrości i ustawieniu ostrości ponownie. Fajny pomysł, ale niestety jest nieco zbyt hacky i nie jest bezpieczny w użyciu. - Sam Watkins
To robi nie działa poprawnie we wszystkich przeglądarkach (np. IE 11 i IE Edge). Tak szybko jak readonly zostanie usunięty, późniejszy wybór pola spowoduje powrót autouzupełniania. - Gone Coding


<form name="form1" id="form1" method="post" 
      autocomplete="off" action="http://www.example.com/form.cgi">

To zadziała w Internet Explorerze i Mozilli FireFox, wadą jest to, że nie jest to standard XHTML.


93
2017-08-05 16:27



Zauważyłem, że dodanie go do elementu formularza nie zawsze uniemożliwia zastosowanie go do poszczególnych danych wejściowych w formularzu. Dlatego najlepiej jest umieścić go bezpośrednio na elemencie wejściowym. - sholsinger
Właściwie to @sholsinger, najlepiej umieścić go zarówno na formularzu, jak i na samym elemencie wejściowym. W ten sposób pokryjesz wszystkie niestandardowe przeglądarki. - AviD
Niestety, począwszy od IE 11, Microsoft już tego nie szanuje input type="password". Mam nadzieję, że żadna inna przeglądarka nie zdecyduje się usunąć tej funkcji. - SamHuckaby
Oprawa autocomplete="off" na form to jedyna rzecz, która działała w Chrome. - Andrew


Rozwiązaniem dla Chrome jest dodanie autocomplete="new-password" do hasła typu wejściowego.

Przykład:

<form name="myForm"" method="post">
<input name="user" type="text" />
<input name="pass" type="password" autocomplete="new-password" />
<input type="submit">
</form>

Chrome zawsze automatycznie uzupełnia dane, jeśli znajdzie pole Wpisz hasło, tylko tyle, by wskazać to pudełko autocomplete = "new-password".

To działa dobrze dla mnie.

Uwaga: upewnij się, że w F12, że twoje zmiany zostaną wprowadzone, wiele razy przeglądarki zapisują stronę w pamięci podręcznej, co sprawiło na mnie wrażenie, że nie działa, ale przeglądarka faktycznie nie wprowadziła zmian.


57
2017-11-24 17:07



Działa to również w Chrome dla innych typów pól, a nie tylko type = "password". - Jake
Użyłem go z hasłem, e-mailem i typami tekstowymi i zadziałało. Użyłem go po prostu tak: autocomplete = "new" - Crak_mboutin
To nie działa dla chrome v63 - Palaniichuk Dmytro


Jak powiedzieli inni, odpowiedź jest autocomplete="off"

Myślę jednak, że warto to stwierdzić czemu dobrym pomysłem jest użycie tego w niektórych przypadkach jako niektórych odpowiedzi na to i duplikować pytania sugerują, że lepiej go nie wyłączać.

Zatrzymywanie przeglądarek przechowujących numery kart kredytowych nie powinno być pozostawione użytkownikom. Zbyt wielu użytkowników nawet nie zdaje sobie sprawy, że to problem.

Szczególnie ważne jest, aby wyłączyć je w polach kodów zabezpieczeń kart kredytowych. Tak jak ta strona stwierdza:

"Nigdy nie przechowuj kodu zabezpieczającego ... jego wartość zależy od domniemania, że ​​jedynym sposobem na jego dostarczenie jest odczytanie go z fizycznej karty kredytowej, udowadniając, że osoba dostarczająca to rzeczywiście posiada kartę".

Problem polega na tym, że jeśli jest to publiczny komputer (kafejka internetowa, biblioteka itp.), Inni użytkownicy mogą łatwo ukraść dane karty, a nawet na własnej maszynie złośliwa witryna może kradnij dane autouzupełniania.


53
2018-01-23 21:21



gdybym poszła na stronę i zapamiętała moją kartę na liście, byłabym bardzo nieszczęśliwa. id zaczynają się zastanawiać, jak mogą być tak nieostrożni. - Simon_Weaver
O wiele prostszy / bardziej krytyczny przypadek. Kiedy odwiedzam stronę użytkownika w części administracyjnej mojej witryny, próbuje ustawić swoją nazwę użytkownika i hasło jako moją nazwę użytkownika i hasło administratora, nie będąc w stanie powiedzieć, że to nie jest formularz logowania. Chcę, aby moje hasło administratora było pamiętane, ale jest to błąd krytyczny, który próbuje zastosować tę zapamiętaną nazwę użytkownika / hasło do wszystkich użytkowników, których edytuję. - rjmunro


Będę musiał błagać, aby różniły się te odpowiedzi, które mówią, aby uniknąć wyłączania automatycznego uzupełniania.

Pierwszą rzeczą, którą należy wyjaśnić, jest to, że autouzupełnianie nie jest jawnie wyłączane w polach formularza logowania, to błąd PCI-DSS. Ponadto, jeśli komputer lokalny użytkownika jest zagrożony, wszelkie dane autouzupełniania mogą być trywialnie uzyskane przez osobę atakującą, ponieważ są przechowywane w przejrzysty sposób.

Istnieje pewna argumentacja za użytecznością, jednak istnieje bardzo dobra równowaga, jeśli chodzi o to, które pola formularza powinny być wyłączone przez autouzupełnianie, a które nie.


29
2017-09-17 00:33



Właśnie przyszło mi do głowy, że IE nie wyzwala zdarzeń "Zmień", gdy wypełniasz dane wejściowe za pomocą funkcji autouzupełniania. Mamy dziesiątki formularzy i ponad tysiąc wydarzeń na temat zmian (sprawdzanie poprawności danych wejściowych, logika biznesowa) rozproszonych po nich. Niedawno zaktualizowaliśmy IE do nowszej wersji i nagle zaczęły się dziać dziwne rzeczy. Na szczęście uruchamiamy aplikację intranetową, a autouzupełnianie nie jest dla nas problemem UX, łatwiej jest po prostu go wyłączyć. - Robotron
Jeśli komputer lokalny użytkownika jest zagrożony, są wkręcone, kropka. Może mieć zainstalowany keylogger, może mieć fałszywy certyfikat główny SSL i wszystko wysłane przez fałszywy serwer proxy itp. Mam prawdziwy powód, aby wyłączyć autouzupełnianie - Kiedy loguję się jako administrator i odwiedzam stronę edycji użytkownika, przypisuje tego użytkownika moja nazwa użytkownika i hasło administratora. Muszę temu zapobiec. - rjmunro
Wygląda na to, że sprzedawcy przeglądają swoje zainteresowania. Zapisane hasła = zablokowanie użytkownika. Włączanie i wyłączanie autouzupełniania było zbyt proste - dlaczego nie złożony standard semantycznych wskazówek ( html.spec.whatwg.org/multipage/... ), który przy okazji pozwala przeglądarce na zbieranie wartościowych danych semantycznych z witryn odwiedzanych przez każdego użytkownika? - aro_tech
konkretny przypadek użycia, który próbuję rozwiązać, jest następujący: są już zalogowani, ale teraz mają uzyskać dostęp do czegoś jeszcze bardziej wrażliwego. Chcę pokazać dialog, który powoduje, że ponownie się uwierzytelniają, wbrew możliwości, że wyszli, by zapalić papierosa, a osoba zła usiadła na swoim krześle. wypróbowałem kilka technik, aby pokonać autouzupełnianie i nic nie działa. teraz myślę, może, przynajmniej, użyj starego, dobrego "password = window.prompt (" Proszę ponownie wpisać hasło ")" oraz nazwę użytkownika w sesji i spróbuj uwierzytelnić to. - David


Trzy opcje: Pierwszy:

<input type='text' autocomplete='off' />

Druga:

<form action='' autocomplete='off'>

Trzeci (kod javascript):

$('input').attr('autocomplete', 'off');

24
2018-03-19 10:05



Pierwsza i druga opcja powinna być jedną opcją, ponieważ różni się w zależności od tego, jak przeglądają ją użytkownicy. - rybo111
Wypróbowałem $ formElement.attr ("autouzupełnianie", "wył"); i to nie działa. - highmaintenance


Próbowałem nieskończonych rozwiązań, a potem znalazłem to:

Zamiast autocomplete="off" po prostu użyj autocomplete="false"

To proste, działa też jak urok w Google Chrome!


18
2018-05-01 05:56



Jak powiedziałeś w chrome, wartość off nie działa. Musi to być "fałsz" - azuax
To nie działa w przeglądarce Chrome 43 - Sevin7
Działa u mnie w Chrome 44.0.2403.130. - GuiGS
Próbowałem: $ formElement.attr ("autouzupełnianie", "fałsz"); przepraszam nie działa. - highmaintenance


Po prostu ustaw autocomplete="off". Ma to bardzo dobry powód: chcesz zapewnić własną funkcję autouzupełniania!


17
2017-08-05 16:32