Питання Як вимкнути автозаповнення веб-переглядача у полі веб-форми / тег введення?


Як ти відключиш? autocomplete в основних браузерах для конкретного input (або form field)?


2260
2017-08-05 16:22


походження


Ще одне використання включає форми адміністрування для створення або редагування користувачів; ви не бажаєте, щоб форма заповнена поточними обліковими даними. Це також стосується форм зміни пароля, esp. ті, що розроблені як залиште порожнім, щоб зберегти поточний пароль. - Álvaro González
Інша причина, яку ви хочете зробити, - це так, що інформація про пароль, копіювання та кредитну картку не заповнюється. - Jeff Atwood
Також зауважте, що деякі тести проникнення вимагають вимкнення автозаповнення на певних полях - Jeff Atwood
Будь ласка, обережно подумайте про це. Є сенс відключити збереження інформації про кредитну картку тощо, але якщо ви не банк, запобігання автозаповненню паролем може суттєво зменшити кількість користувачів, які не хочуть входити на ваш сайт, особливо на телефонах, де багато вдаваних введення паролів на стиснуті клавіатури. - John Mellor
Це може бути дійсно дієвим ділом в інших ситуаціях, такими як, наприклад, у формах управління користувачами - додавання / оновлення користувача - ви майже ніколи не хочете, щоб паролі автоматично завершувались під час адміністрування набору користувачів у великій системі. - Dave Amphlett


Відповіді:


Firefox 30 ігнорує autocomplete="off" для паролів, вирішивши запропонувати користувачеві замість того, чи повинен пароль зберігатися у клієнта. Зверніть увагу на наступне коментар з 5 травня 2014 року:

  • Менеджер паролів завжди запит, якщо він хоче зберегти пароль. Паролі не зберігаються без дозволу від користувача.
  • Ми є третьою версією браузера для впровадження цих змін після IE та Chrome.

Відповідно до Документація розробника Mozilla атрибут елемента форми autocomplete перешкоджає зберігати кешування даних у формі старих веб-переглядачів.

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

2219
2017-08-05 16:24



Це не спрацювало для мене в Firefox 3.0.3 Мені довелося поставити атрибут автозаповнення у форматі, а не в INPUT. - Winston Fassett
Автозаповнення визначається лише в стандартах HTML 5, тому він буде порушувати будь-які валідації, які ви виконуєте, до HTML 4. * ... - Jrgns
@Winston, ви повинні помістити його як у формі, так і на сам елемент вводу. Таким чином ви покриваєте всю нестандартність браузерів. - AviD
І пам'ятайте, щоб вимкнути ваш автозаповнення = на розширення (якщо ви використовуєте Chrome), перш ніж протестувати веб-програму. Інакше ти відчуєш себе справді дурним, як я. ;) - Jo Liss
autocomplete = "<будь-що, крім роботи чи роботи>" - swapab


На додаток до autocomplete=off, ви також можете мати назви полів форм, які будуть рандомізовані за допомогою коду, який генерує сторінку, можливо, додаючи певну сеансичну рядок в кінець імен.

Коли видається форма, ви можете скинути цю частину, перш ніж обробляти їх на стороні сервера. Це не дозволить веб-переглядачу знайти контекст для вашого поля, а також може допомогти запобігти нападкам XSRF, оскільки зловмисник не зможе вгадати назви полів для подання форми.


248
2017-10-20 13:36



Це набагато краще рішення порівняно з використанням автозаповнення = "вимкнено". Все, що вам потрібно зробити, це створити нове ім'я на кожному завантаженні сторінки та зберегти це ім'я до $ _SESSION для подальшого використання: $_SESSION['codefield_name'] = md5(uniqid('auth', true)); - enchance
Ні, це не найкраще рішення, оскільки походження переваг для цього параметра є користувацьким агентом, також відомий як веб-браузер. Існує різниця між підтримкою певної поведінки (яка намагається зробити HTML 5) і примушувати її вирішувати від імені користувача, що, на вашу думку, є "набагато кращим рішенням". - amn
Це рішення може працювати з усіма браузерами, тому в цьому відношенні це "краще". Тим не менш, amn є правильним, вирішивши відключити автозавершення від імені ваших користувачів, це не найкраща ідея. Це означає, що я відключаю лише автозаповнення в дуже специфічних ситуаціях, таких як, якщо ви плануєте створити власну функцію автоматичного завершення і не хочете конфліктів або дивної поведінки. - macguru2000
Що стосується атак XSRF, то я не впевнений, який тип атаки ви представляєте, але не може зловмисник просто зняти кінцеву частину так само, як ви на сервері, щоб визначити поля? Або, якщо зловмисник публікує поля, вони не можуть додати власну довільну стрічку, оскільки вона буде знята сервером? - xr280xr
@ macguru2000 створення вашого власного автозавершення є повністю законним і загальним використанням випадку. Дійсно, браузер повинен полегшити розробникам автоматичне завершення автоматичного завершення, коли їм потрібно, замість того, щоб змусити нас використовувати хакі, як цей - whoadave


Більшість основних браузерів і менеджерів паролів (правильно, IMHO) тепер ігнорують autocomplete=off.

Чому? Багато банків та інших сайтів "високої безпеки" додали autocomplete=off на їхні сторінки входу "для цілей безпеки", але це фактично зменшує безпеку, оскільки це змушує людей змінювати паролі на цих сайтах високої безпеки, щоб їх було легко запам'ятати (і, таким чином, зламати їх), оскільки автозаповнення було порушено.

Довгий час більшість адміністраторів паролів почали ігнорувати autocomplete=off, і тепер браузери починають робити те ж саме для входів користувача та пароля.

На жаль, помилки в реалізаціях автозаповнення вставляють ім'я користувача та / або інформацію про паролі у невідповідні поля форми, що спричиняє помилки перевірки форми, або ще гірше, випадково вставляючи імена користувачів у поля, які користувач навмисне пустив.

Що робити веб-розробнику?

  • Якщо ви можете зберігати всі поля паролів на сторінці самостійно, це чудовий початок, оскільки здається, що наявність поля пароля є основним тригером для автоматичного завершення користувача / пароля. В іншому випадку прочитайте наведені нижче поради.
  • Safari помічає, що в цьому випадку існує 2 поля для паролів та вимикає автозавершення, припускаючи, що це повинна бути форма зміни пароля, а не форма для входу. Тому обов'язково використовуйте два поля для паролів (нові та нові) для будь-яких форм, які ви дозволите
  • Chrome 34, на жаль, намагатиметься автоматично заповнювати поля з користувачем / пасом, коли побачить поле пароля. Це досить погана помилка, яка, сподіваюсь, змінить поведінку Safari. Однак додавання цього у верхню частину вашої форми, здається, вимкне автозаповнення пароля:

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

Я ще не вивчив IE чи Firefox, але буду радий оновлювати відповідь, якщо в коментарях є інша інформація.


187
2018-04-23 04:00



Що ви маєте на увазі: "додавання цього на вашу сторінку, здається, відключає автозаповнення для сторінки:" - wutzebaer
@wutzebaer, Chrome помічає поле прихованого пароля та зупиняє автоматичне завершення. Як повідомляється, це полягає в тому, щоб запобігти крадінню паролем інформації сайту, якщо користувач не помітить. - David W
Ваш фрагмент коду перешкоджає автозаповненням для поля входу в Chrome, Firefox, IE 8 та IE 10. Не тестувало IE 11. Добре! Тільки проста відповідь, яка все ще працює. - Sam Watkins
Здається, ваша сафарі-нотатка також працює на Chrome, принаймні, станом на грудень 2015 року. У полі реєстрації я маю поле для імені користувача та пароля, яке автоматично виконується з даними з форми входу. Створення двох type='password' поля на одній сторінці призвели до того, що автозаповнення "збереження пароля" браузера буде ігноруватися, що зробило цілком навантаження сенсу, оскільки форми реєстрації часто вимагають введення пароля двічі, коли форми входу тільки запитують про це один раз. - Matt Fletcher
Здається, що Chrome 55 більше не працює, хіба що поле додаткового пароля не приховується, що перевершує ціль. - jokkedk


Іноді навіть автозаповнення = вимкнено б не заважати заповнювати в облікових даних в неправильні поля, але не користувач або псевдонім поле.

Це рішення є додатком до повідомлення Апінштейна про поведінку браузера.

фіксуйте автозаповнення веб-переглядача лише для читання та встановлюйте запис на фокус (клацання та вкладка)

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

Оновлення: Мобільний Safari налаштовує курсор у полі, але не відображає віртуальну клавіатуру. Новий Fix працює як і раніше, але обробляє віртуальну клавіатуру:

<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

Оскільки браузер автоматично заповнює вхідні дані неправильному текстовому полі !?

Я помічаю цю дивну поведінку в Chrome і Safari, коли в ньому є поля пароля однакова форма Я думаю, браузер шукає поле пароля, щоб вставити збережені облікові дані. Потім він автоматично заповнює (просто здогадуючись через спостереження) найближче поле textlike-input, що з'являється перед полем пароля в DOM. Оскільки браузер є останнім екземпляром, і ви не можете керувати ним,

Це лише монолітне виправлення, що працювало для мене.


120
2018-06-16 16:04



А якщо немає JavaScript, тоді вся форма не виконується. -1 - Jimmy Kane
@JimmyKane ключовим буде також додати атрибут за допомогою javascript в першу чергу (який dsuess не зробив тут, а просто додавання для повноти саке). - trnelson
@tmelson Я розумію, але чому ж використовувати js навіть відключити? Давайте уникати js для речей, які можна покращити спочатку. Знову я згоден з тобою, хоча. - Jimmy Kane
Це не спрацьовує прямо в IE8, поле readonly password не можна редагувати, коли ви вперше фокусуєте його, лише після того, як ви знову розфокусуєтеся та фокусуєтеся знову. Красива ідея, але, на жаль, це занадто нерозумно і не безпечно використовувати. - Sam Watkins
Це робить ні правильно працювати на всіх веб-переглядачах (наприклад, IE 11 і IE Edge). Як тільки readonly видаляється, після вибору поля результати автоматичного завершення повертаються. - Gone Coding


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

Це буде працювати в Internet Explorer і Mozilla FireFox, недоліком є ​​те, що це не стандарт XHTML.


93
2017-08-05 16:27



Я помітив, що додавання його в елемент форми не завжди перешкоджає застосуванню його до окремих вхідних даних у формі. Тому, ймовірно, краще помістити його безпосередньо на елемент вводу. - sholsinger
Насправді, @sholsinger, найкраще помістити його як у формі, так і на сам елемент вводу. Таким чином ви покриваєте всю нестандартність браузерів. - AviD
На жаль, починаючи з IE 11, Microsoft більше не дотримується цього input type="password". Сподіваємось, жоден інший веб-переглядач не вирішить видалити цю функцію. - SamHuckaby
Налаштування autocomplete="off" на form це єдине, що працювало в Chrome. - Andrew


Рішення для Chrome потрібно додати autocomplete="new-password" до пароля типу вводу.

Приклад:

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

Chrome завжди автоматично заповнює дані, якщо він знаходить коробку введіть пароль, достатньо, щоб вказати на цю коробку autocomplete = "new-password".

Це добре працює для мене.

Примітка. Переконайтеся, що з F12 ваші зміни набирають чинності, багато разів веб-переглядачі зберігають сторінку в кеш-пам'яті, це дало мені погане враження, що це не спрацювало, але браузер фактично не внесли ці зміни.


57
2017-11-24 17:07



Це також працює в Chrome для інших типів полів, а не просто type = "password". - Jake
Я використовував його за допомогою пароля, електронної пошти та текстових типів, і він працював. Я використовував це просто так: autocomplete = "new" - Crak_mboutin
Він не працює для v63 chrome - Palaniichuk Dmytro


Як інші сказали, відповідь є autocomplete="off"

Однак, я думаю, варто зазначити чому в деяких випадках це корисно використовувати, оскільки деякі відповіді на це і дубльований Питання запропонували, що краще не вимикати його.

Заборона браузерів зберігати номери кредитних карток не повинна залишатись користувачам. Занадто багато користувачів навіть не зрозуміють, що це проблема.

Особливо важливо вимкнути його на полях кодів безпеки кредитних карток. Як ця сторінка стверджує:

"Ніколи не зберігайте код безпеки ... його значення залежить від презумпції, що єдиним способом її надання є його читання з фізичної кредитної картки, що підтверджує, що особа, яка її надає, насправді має картку".

Проблема полягає в тому, що якщо це загальнодоступний комп'ютер (кібер-кафе, бібліотека тощо), тоді іншим користувачам легко стати крадіжкою даних вашої картки, і навіть на вашому комп'ютері може бути шкідливий веб-сайт викрадення автозаповнених даних.


53
2018-01-23 21:21



якщо я вийшов на сайт, і він запам'ятав мою картку в спадному меню, я був би дуже нещасним. id починають дивуватися, як вони можуть бути настільки недбайливими. - Simon_Weaver
Набагато простіше / більш критично. Коли я відвідую сторінку користувача в адміністративній частині мого сайту, він намагається встановити своє ім'я користувача та пароль, щоб бути моїм ім'ям і паролем адміністратора, не можу сказати, що це не форма для входу. Я хочу запам'ятати пароль адміністратора, але це критична помилка, коли він намагається застосувати це запам'ятовуване ім'я користувача та пароль до будь-яких користувачів, які я потім редагую. - rjmunro


Я маю б попросити відрізнитись від тих відповідей, які говорять, щоб уникнути автоматичного завершення відключення.

Перше, що потрібно висвітлити, полягає в тому, що автозаповнення не буде явним чином вимкнено у полях входу для входу, це збій PCI-DSS. Крім того, якщо локальний комп'ютер користувача скомпрометований, то будь-які дані з автозавершення можуть бути тривіально отримані зловмисником, оскільки він зберігається в явному вигляді.

Існує, безумовно, аргумент для юзабіліті, однак є дуже чудовий баланс, коли справа доходить до того, які поля форми повинні автоматично завершувати відключення і які не повинні.


29
2017-09-17 00:33



Щойно до мене привернуло увагу, що IE не викликає подій на зміну, коли ви заповнюєте текстовий ввід за допомогою автозаповнення. У нас є десятки форм і понад тисячу подій на тему "Зміна" (перевірки вхідних даних, бізнес-логіка), розкидані по них. Нещодавно ми оновили IE до нової версії та раптово дивні речі почали відбуватися. На щастя, ми використовуємо програму інтранету, а автозаповнення не є для нас проблемою UX, її простіше просто вимкнути. - Robotron
Якщо користувачі локальної машини піддаються компрометації, вони загвинчуються, період. Вона міг встановити кейлоггер, він міг мати підроблений кореневий сертифікат SSL, і все було надіслано через помилковий проксі-сервер тощо. У мене є реальна причина відключити автозаповнення. Коли я входжу як адміністратор і відвідаю сторінку редагування, він призначає цей користувач мій адміністратор ім'я користувача та пароль. Мені потрібно запобігти такої поведінки. - rjmunro
Браузерні постачальники, здається, дивляться на свої власні інтереси. Збережені паролі = блокування користувача. І автоматичне завершення ввімкнення / вимикання було занадто просто - чому б не складний стандарт семантичних підказок ( html.spec.whatwg.org/multipage/... ), який, навпаки, дозволяє браузеру збирати цінні семантичні дані з сайтів, які відвідує кожен користувач? - aro_tech
той конкретний варіант використання, який я намагаюся вирішити, це такий: вони вже увійшли до системи, але тепер вони мають доступ до чогось ще більш чутливого. Я хочу показати діалогове вікно, яке спрощує їх повторну автентифікацію, незважаючи на те, що вони пішли, щоб мати дим, а погана людина сіла за крісло. спробували декілька прийомів, щоб перемогти автозавершення, і нічого не працює. Тепер я думаю, може бути, принаймні, використовуйте старий добрий пароль = window.prompt ("Будь ласка, повторно введіть свій пароль") "плюс ім'я користувача в сеансі, і спробуйте автентифікувати це. - David


Три варіанти: Перший:

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

Другий:

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

Третій (код JavaScript):

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

24
2018-03-19 10:05



Перший та другий варіанти мають бути одним із варіантів, оскільки це залежить від того, як саме браузери справляються з цим. - rybo111
Спроба $ formElement.attr ('автозаповнення', 'вимкнути'); і це не працює. - highmaintenance


Я намагався нескінченні рішення, а потім я знайшов це:

Замість autocomplete="off" просто просто використовуйте autocomplete="false"

Такий простий, як і це, і це працює як чарівність в Google Chrome, а також!


18
2018-05-01 05:56



Як ви сказали в chrome, відключене значення не працює. Це має бути "хибним" - azuax
Це не працює в Chrome 43 - Sevin7
Працює для мене в Chrome 44.0.2403.130. - GuiGS
Випробували це: $ formElement.attr ('autocomplete', 'false'); вибачте не працює - highmaintenance


Просто встановіть autocomplete="off". Існує дуже важлива причина для цього: Ви хочете надати власну функцію автоматичного завершення!


17
2017-08-05 16:32