Jak wyłączyć autocomplete
w głównych przeglądarkach dla określonego input
(lub form field
)?
html
forms
browser
autocomplete
Brett Veenstra
źródło
źródło
Odpowiedzi:
Firefox 30 ignoruje
autocomplete="off"
hasła, zamiast tego pyta użytkownika, czy hasło powinno być przechowywane na kliencie. Zwróć uwagę na następujący komentarz z 5 maja 2014 r .:Zgodnie z dokumentacją Mozilla Developer Network atrybut Boolean formularza element
autocomplete
zapobiega buforowaniu danych formularza w starszych przeglądarkach.źródło
Oprócz
autocomplete=off
tego nazwy pól formularzy mogą być losowe według kodu, który generuje stronę, być może poprzez dodanie na końcu nazw ciągów specyficznych dla sesji.Po przesłaniu formularza możesz go usunąć przed przetworzeniem po stronie serwera. Uniemożliwi to przeglądarce znalezienie kontekstu dla twojego pola, a także może pomóc w zapobieganiu atakom XSRF, ponieważ osoba atakująca nie będzie w stanie odgadnąć nazw pól podczas przesyłania formularza.
źródło
$_SESSION['codefield_name'] = md5(uniqid('auth', true));
Większość głównych przeglądarek i menedżerów haseł (poprawnie IMHO) teraz ignoruje
autocomplete=off
.Dlaczego? Wiele banków i innych stron o „wysokim bezpieczeństwie” dodanych
autocomplete=off
do swoich stron 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 bezpieczeństwie, aby były łatwe do zapamiętania (a tym samym złamania) od momentu autouzupełniania był zepsuty.Dawno temu większość menedżerów haseł zaczęła ignorować
autocomplete=off
, a teraz przeglądarki zaczynają robić to samo tylko w przypadku wprowadzania nazwy użytkownika / hasła.Niestety błędy w autouzupełnianiu implementują wstawianie nazwy użytkownika i / lub hasła w nieodpowiednich polach formularza, powodując błędy sprawdzania poprawności formularza lub jeszcze gorzej, przypadkowo wstawiając nazwy użytkownika w pola, które celowo pozostawiono puste przez użytkownika.
Co robi programista internetowy?
Chrome 34 niestety spróbuje automatycznie wypełnić pola użytkownik / hasło, gdy tylko zobaczy pole hasła. Jest to dość zły błąd, który - mam nadzieję - zmieni zachowanie Safari. Jednak dodanie tego na górze formularza wydaje się wyłączać automatyczne uzupełnianie hasła:
Nie zbadałem jeszcze dokładnie IE ani Firefoksa, ale chętnie zaktualizuję odpowiedź, jeśli inni mają informacje w komentarzach.
źródło
type='password'
pól na jednej stronie spowodowało, że autouzupełnianie przeglądarki „zapisz hasło” zostało zignorowane, co miało sens, ponieważ formularze rejestracyjne zwykle proszą o hasło dwukrotnie, gdy formularze logowania pytają go tylko raz.Czasami nawet autouzupełnianie = off będzie nie przeszkadza, aby wypełnić w mandatów w nieodpowiednich obszarach, ale nie użytkownika lub pole nick.
To obejście stanowi uzupełnienie postu apinsteina na temat zachowania przeglądarki.
napraw autouzupełnianie przeglądarki w trybie tylko do odczytu i ustaw zapisywalne fokus (kliknij i tab)
Aktualizacja: Mobile Safari ustawia kursor w polu, ale nie wyświetla wirtualnej klawiatury. Nowa poprawka działa jak poprzednio, ale obsługuje wirtualną klawiaturę:
Demo na żywo https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
Ponieważ przeglądarka automatycznie wypełnia poświadczenia w złym polu tekstowym !?
Zauważyłem to dziwne zachowanie w Chrome i Safari, gdy pola hasła są w tej samej formie. Myślę, że przeglądarka szuka pola hasła, aby wstawić zapisane poświadczenia. Następnie automatycznie wypełnia (zgadując z obserwacji) najbliższe tekstowe pole wejściowe, które pojawia się przed polem hasła w DOM. Ponieważ przeglądarka jest ostatnią instancją i nie można jej kontrolować,
Ta poprawka tylko do odczytu działała dla mnie.
źródło
readonly
usunięciu późniejszy wybór pola powoduje powrót autouzupełniania.Będzie to działać w Internet Explorer i Mozilla FireFox, wadą jest to, że nie jest to standard XHTML.
źródło
input type="password"
. Mamy nadzieję, że żadna inna przeglądarka nie zdecyduje się na usunięcie tej funkcji.autocomplete="off"
naform
to jedyną rzeczą, która pracowała dla Chrome.Rozwiązaniem dla Chrome jest dodanie
autocomplete="new-password"
hasła typu wejściowego. Sprawdź poniższy przykład.Przykład:
Chrome zawsze automatycznie uzupełnia dane, jeśli znajdzie pole typu hasło , wystarczające do wskazania tego pola
autocomplete = "new-password"
.Uwaga: upewnij się,
F12
że wprowadzone zmiany obowiązują, wiele razy przeglądarki zapisują stronę w pamięci podręcznej, co sprawiło, że nie działałem, ale przeglądarka tak naprawdę nie wprowadziła zmian.źródło
Jak powiedzieli inni, odpowiedź brzmi
autocomplete="off"
Myślę jednak, że warto wyjaśnić, dlaczego warto to stosować w niektórych przypadkach, ponieważ niektóre odpowiedzi na to pytanie i duplikaty pytań sugerują, że lepiej nie wyłączać tego.
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 wyłączenie go w polach kodów bezpieczeństwa kart kredytowych. Jak podaje ta strona :
Problem polega na tym, że jeśli jest to komputer publiczny (kafejka internetowa, biblioteka itp.), Inni użytkownicy mogą łatwo ukraść dane karty, a nawet na własnej maszynie złośliwa witryna może ukraść dane z autouzupełnianiem .
źródło
Rozwiązałem niekończącą się walkę z Google Chrome przy użyciu losowych postaci. Kiedy zawsze renderujesz autouzupełnianie za pomocą losowego ciągu, nigdy niczego nie zapamięta.
Mam nadzieję, że pomoże to innym ludziom.
źródło
autocompleteoff
klasę do żądanego pola wejściowego.Musiałbym zacząć różnić się od tych odpowiedzi, które mówią, aby uniknąć wyłączenia autouzupełniania.
Pierwszą rzeczą, o której należy wspomnieć, jest to, że autouzupełnianie, które nie jest jawnie wyłączone w polach formularza logowania, kończy się niepowodzeniem PCI-DSS. Ponadto, jeśli komputer lokalny użytkownika zostanie przejęty, atakujący może w prosty sposób uzyskać dowolne dane autouzupełniania, ponieważ są one przechowywane w sposób niezauważalny.
Z pewnością istnieje argument za użytecznością, jednak istnieje bardzo dobra równowaga, jeśli chodzi o to, które pola formularza powinny mieć wyłączone autouzupełnianie, a które nie.
źródło
Trzy opcje: po pierwsze:
Druga:
Po trzecie (kod javascript):
źródło
Na pokrewnej, a właściwie zupełnie przeciwnej nucie -
źródło
W rzeczywistości wykorzystaliśmy pomysł sasb dla jednej strony. Była to aplikacja internetowa do oprogramowania medycznego do prowadzenia gabinetu lekarskiego. Jednak wielu naszych klientów było chirurgami, którzy korzystali z wielu różnych stacji roboczych, w tym z półpublicznych terminali. Chcieli więc upewnić się, że lekarz, który nie rozumie konsekwencji automatycznie zapisanych haseł lub nie zwraca uwagi, nie może przypadkowo pozostawić łatwo dostępnych danych logowania. Oczywiście stało się to wcześniej niż pomysł prywatnego przeglądania, który zaczyna się pojawiać w IE8, FF3.1 itd. Mimo to wielu lekarzy jest zmuszonych używać oldschoolowych przeglądarek w szpitalach z IT, które się nie zmieni.
Mieliśmy więc stronę logowania, która generowała losowe nazwy pól, które działałyby tylko dla tego postu. Tak, jest to mniej wygodne, ale po prostu uderza użytkownika ponad głowę, że nie przechowuje danych logowania na terminalach publicznych.
źródło
Żadne z rozwiązań nie działało dla mnie w tej rozmowie.
W końcu wymyśliłem czyste rozwiązanie HTML, które nie wymaga Javascript , działa w nowoczesnych przeglądarkach (oprócz IE; musiałem mieć co najmniej 1 haczyk, prawda?) I nie wymaga wyłączania autouzupełniania dla całego formularza.
Po prostu wyłącz autouzupełnianie na,
form
a następnie WŁĄCZ je,input
jeśli chcesz, aby działało w formularzu. Na przykład:źródło
Właśnie ustawiłem
autocomplete="off"
. Jest to bardzo dobry powód: chcesz zapewnić własną funkcjonalność autouzupełniania!źródło
Próbowałem nieskończonych rozwiązań, a potem znalazłem to:
Zamiast
autocomplete="off"
po prostu użyćautocomplete="false"
To takie proste i działa jak urok w Google Chrome!
źródło
To działa dla mnie.
Możemy również użyć tej strategii w innych kontrolkach, takich jak tekst, zaznaczanie itp
źródło
Myślę, że
autocomplete=off
jest obsługiwany w HTML 5.Zastanów się, dlaczego chcesz to zrobić - w niektórych sytuacjach może to mieć sens, ale nie rób tego tylko ze względu na to.
Jest to mniej wygodne dla użytkowników, a nawet problem bezpieczeństwa w OS X (wspomniany przez Sorena poniżej). Jeśli martwisz się o zdalne kradzież haseł - rejestrator naciśnięć klawiszy nadal może to zrobić, nawet jeśli aplikacja tego używa
autcomplete=off
.Jako użytkownik, który zdecyduje się, aby przeglądarka zapamiętała (większość) moich informacji, uważałbym to za irytujące, gdyby Twoja strona nie pamiętała moich.
źródło
dla wejść, które nie chcą, żeby zapamiętać dane formularza (
username
,password
etc.), jak pokazano poniżej:Mam nadzieję że to pomoże.
źródło
$(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
onfocusout="this.setAttribute('readonly', 'readonly');"
Najlepszym rozwiązaniem:
Zapobiegaj autouzupełnianiu nazwy użytkownika (lub adresu e-mail) i hasła:
Zapobiegaj autouzupełnianiu pola:
Objaśnienie:
autocomplete
kontynuuje pracę<input>
,autocomplete="off"
nie działa, ale można zmienićoff
ciąg znaków na losowy, npnope
.Pracuje w:
Chrome: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 i 64
Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 i 58
źródło
autocomplete
atrybutu i nadal wyświetla poprzednie wpisy jako sugestie autouzupełniania pod danymi wejściowymi.autocomplete
, nadal pojawia się menu sugestii na podstawie wcześniej wprowadzonych wartości. Jest w porządku na komputerze, ale nie na Androidzie Chrome.Trochę za późno na grę ... ale właśnie natknąłem się na ten problem i próbowałem kilku awarii, ale ten działa dla mnie znaleziony w MDN
źródło
Dodawanie
autocomplete="off"
na znacznik formularza wyłączy autouzupełnianie przeglądarki (co zostało wcześniej wpisane w tym polu) ze wszystkich
input
pól w tym konkretnym formularzu.Testowane na:
źródło
Dodanie tego
autocomplete="off"
nie spowoduje cięcia.Zmień atrybut typu danych wejściowych na
type="search"
.Google nie stosuje automatycznego wypełniania do danych wejściowych z rodzajem wyszukiwania.
źródło
Użyj niestandardowej nazwy i identyfikatora dla pól, aby zamiast „nazwa” mieć „nazwa_”. Przeglądarki nie będą wtedy widzieć go jako pola nazwy. Najlepsze jest to, że możesz to zrobić na niektórych, ale nie na wszystkich polach i automatycznie uzupełni niektóre, ale nie wszystkie pola.
źródło
Aby uniknąć nieprawidłowego XHTML, możesz ustawić ten atrybut za pomocą javascript. Przykład użycia jQuery:
Problem polega na tym, że użytkownicy bez javascript otrzymają funkcję autouzupełniania.
źródło
wypróbuj je również, jeśli po prostu
autocomplete="off"
nie działa:źródło
Nie mogę uwierzyć, że jest to problem tak długo po zgłoszeniu. Powyższe rozwiązania nie działały dla mnie, ponieważ safari zdawało się wiedzieć, kiedy element nie był wyświetlany lub poza ekranem, jednak następujące działania działały dla mnie:
Mam nadzieję, że jest to przydatne dla kogoś!
źródło
Oto on:
źródło
Jest to problem bezpieczeństwa, który przeglądarki ignorują teraz. Przeglądarki identyfikują i przechowują treść za pomocą nazw wejściowych, nawet jeśli programiści uważają, że informacje są wrażliwe i nie należy ich przechowywać. Zróżnicowanie nazwy wejściowej między 2 żądaniami rozwiąże problem (ale nadal zostanie zapisane w pamięci podręcznej przeglądarki i zwiększy pamięć podręczną przeglądarki). Poproś użytkownika o włączenie lub wyłączenie opcji w ustawieniach przeglądarki nie jest dobrym rozwiązaniem. Problem można rozwiązać w backend.
Oto moja poprawka. Podejście, które wdrożyłem w swoich ramach. Wszystkie elementy autouzupełniania są generowane z ukrytym wejściem, takim jak ten:
Serwer następnie przetwarza zmienne przesyłane w następujący sposób:
Dostęp do wartości można uzyskać jak zwykle
Przeglądarka nie będzie w stanie sugerować informacji z poprzedniego żądania ani od poprzednich użytkowników.
Wszystko działa jak urok, nawet jeśli aktualizacje przeglądarek chcą zignorować autouzupełnianie lub nie. To był najlepszy sposób na rozwiązanie tego problemu.
źródło
Żaden z wymienionych tu hacków nie działał dla mnie w Chrome. Dyskusja na ten temat tutaj: https://code.google.com/p/chromium/issues/detail?id=468153#c41
Dodanie tego do
<form>
dzieła (przynajmniej na razie):źródło
maxlength="0"
tej opcji uniemożliwia firefoxowi automatyczne wypełnianie pola.Możesz użyć w danych wejściowych.
Na przykład;
źródło