Как отключить автозаполнение браузера в поле веб-формы/тег ввода?

Как отключить autocomplete в основных браузерах для определенного input (или form field)?

2269
задан Brett Veenstra 05 авг. '08 в 19:22
источник поделиться

60 ответов

  • 1
  • 2

Firefox 30 игнорирует autocomplete="off" для паролей, предпочитая вместо этого запрашивать пользователя, должен ли пароль храниться на клиенте. Обратите внимание на следующий комментарий от 5 мая 2014 года:

  • Менеджер паролей всегда запрашивает, хочет ли он сохранить пароль. Пароли не сохраняются без разрешения пользователя.
  • Мы являемся третьим браузером для реализации этого изменения после IE и Chrome.

Согласно документации разработчика Mozilla атрибут элемента формы autocomplete предотвращает кэширование данных форм в старых браузерах.

<input type="text" name="foo" autocomplete="off" />
2226
ответ дан nlucaroni 05 авг. '08 в 19:24
источник поделиться

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

Когда форма отправлена, вы можете снять эту часть перед ее обработкой на стороне сервера. Это помешает веб-браузеру найти контекст для вашего поля, а также может помочь предотвратить атаки XSRF, потому что злоумышленник не сможет угадать имена полей для представления формы.

248
ответ дан Ben Combee 20 окт. '08 в 16:36
источник поделиться

Большинство основных браузеров и менеджеров паролей (правильно, 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
ответ дан apinstein 23 апр. '14 в 7:00
источник поделиться

Иногда даже autocomplete = off не помешает заполнять учетные данные в неправильные поля, но не в поле пользователя или ник.

Это обходное решение в дополнение к сообщению apinstein о поведении браузера.

исправить автозаполнение браузера в режиме "только для чтения" и установить запись в фокусе (щелчок и вкладка)

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

Обновление: Mobile Safari устанавливает курсор в поле, но не показывает виртуальную клавиатуру. Новое исправление работает, как раньше, но обрабатывает виртуальную клавиатуру:

<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();  }" />

Демо-версия https://jsfiddle.net/danielsuess/n0scguv6/

//UpdateEnd

Потому что браузер автоматически заполняет учетные данные в неправильном текстовом поле !?

Я замечаю это странное поведение в Chrome и Safari, когда есть поля пароля в той же форме. Я думаю, браузер ищет поле пароля для вставки сохраненных учетных данных. Затем он автоматически заполняет (просто гадать из-за наблюдения) ближайшее текстовое поле ввода, которое появляется перед полем пароля в DOM. Поскольку браузер является последним экземпляром, и вы не можете его контролировать,

Это исправление только для чтения работало для меня.

120
ответ дан dsuess 16 июня '14 в 19:04
источник поделиться
<form name="form1" id="form1" method="post" 
      autocomplete="off" action="http://www.example.com/form.cgi">

Это будет работать в Internet Explorer и Mozilla FireFox, недостатком является то, что он не является стандартом XHTML.

93
ответ дан brendan 05 авг. '08 в 19:27
источник поделиться

Решение для 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
ответ дан Geynen 24 нояб. '16 в 20:07
источник поделиться

Как говорили другие, ответ autocomplete="off"

Тем не менее, я думаю, что стоит сказать, почему это хорошая идея использовать это в некоторых случаях, поскольку некоторые ответы на это и дублирующие вопросы предложили лучше не отключать его.

Остановка браузеров, хранящих номера кредитных карт, не должна предоставляться пользователям. Слишком много пользователей даже не поймут, что это проблема.

Особенно важно отключить его на полях для кодов защиты кредитных карт. На этой странице указано:

"Никогда не храните защитный код... его значение зависит от предположения, что единственный способ его предоставить - прочитать его с физической кредитной карты, доказывая, что человек, который его снабжает, действительно держит карту".

Проблема в том, что если это общедоступный компьютер (кибер-кафе, библиотека и т.д.), То другим пользователям легко украсть данные вашей карты, и даже на вашей собственной машине вредоносный веб-сайт может украсть данные автозаполнения.

53
ответ дан Sam Hasler 24 янв. '09 в 0:21
источник поделиться

Мне пришлось бы просить отличаться от тех ответов, которые говорят, чтобы избежать отключения автоматического завершения.

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

Конечно, есть аргумент в пользу удобства использования, однако есть очень тонкий баланс, когда дело доходит до того, какие поля формы должны иметь автозаполнение, и которые не должны.

29
ответ дан Securatek 17 сент. '11 в 3:33
источник поделиться

Три варианта: Сначала:

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

Второе:

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

Третий (код javascript):

$('input').attr('autocomplete', 'off');
24
ответ дан yajay 19 марта '13 в 13:05
источник поделиться

Я пробовал бесконечные решения, и тогда я нашел это:

Вместо autocomplete="off" просто используйте autocomplete="false"

Просто так, и он работает как шарм в Google Chrome.

18
ответ дан Kaszoni Ferencz 01 мая '15 в 8:56
источник поделиться

На связанную или фактически, совершенно противоположную ноту -

"Если вы являетесь пользователем вышеупомянутой формы и хотите снова включить функцию автозаполнения, используйте" заведомо пароль "на этой странице букмарклетов. Он удаляет все атрибуты autocomplete="off" из всех форм на странице. борьба с хорошей борьбой! "

17
ответ дан Antti Sykäri 08 сент. '08 в 22:29
источник поделиться

Просто установите autocomplete="off". Для этого есть очень веская причина: вы хотите предоставить свои собственные функции автозаполнения!

17
ответ дан EndangeredMassa 05 авг. '08 в 19:32
источник поделиться

Мы действительно использовали идею sasb для одного сайта. Это было веб-приложение для медицинского программного обеспечения для работы в офисе врача. Тем не менее, многие из наших клиентов были хирургами, которые использовали множество разных рабочих станций, в том числе полупубличных терминалов. Таким образом, они хотели удостовериться, что врач, который не понимает значения автоматически сохраненных паролей или не обращает внимания, не может случайно оставить свою регистрационную информацию легко доступной. Конечно, это было до идеи частного просмотра, который начинает отображаться в IE8, FF3.1 и т.д. Несмотря на это, многие врачи вынуждены использовать старые школьные браузеры в больницах с ИТ, которые не изменятся.

Итак, у нас была страница регистрации, генерирующая случайные имена полей, которые будут работать только для этого сообщения. Да, это менее удобно, но это просто поражает пользователя над головой, не сохраняя регистрационную информацию на публичных терминалах.

16
ответ дан Jon Adams 16 сент. '08 в 18:35
источник поделиться

Я думаю, что autocomplete=off поддерживается в HTML 5.

Спросите себя, почему вы хотите это сделать, хотя это может иметь смысл в некоторых ситуациях, но не делайте этого только ради этого.

Это менее удобно для пользователей и даже не проблема безопасности в OS X (упомянутый Сореном ниже). Если вы беспокоитесь о том, что люди, у которых их пароли украдены удаленно, - регистратор нажатий клавиш все еще может это сделать, даже если ваше приложение использует autcomplete=off.

Как пользователь, который хочет, чтобы браузер помнил (большую часть) мою информацию, мне было бы неприятно, если бы ваш сайт не помнил мою.

16
ответ дан user631300 24 февр. '11 в 2:24
источник поделиться

Ни один из решений не работал у меня в этом разговоре.

Наконец-то я понял, что чистый HTML-решение, для которого требуется нет Javascript, работает в современных браузерах (кроме IE, нужно было хотя бы 1 catch, правда?), и не требует от вас отключения автозаполнения для всей формы.

Просто отключите автозаполнение на form, а затем включите его для любого input, который вы хотите, чтобы он работал в форме. Например:

<form autocomplete="off">
    <!-- these inputs will not allow autocomplete and chrome 
         won't highlight them yellow! -->
    <input name="username"  />
    <input name="password" type="password" />
    <!-- this field will allow autocomplete to work even 
         though we've disabled it on the form -->
    <input name="another_field" autocomplete="on" />
</form>
16
ответ дан lifo 15 авг. '13 в 22:02
источник поделиться

Был нестандартный способ сделать это (я думаю, Mozilla и Internet Explorer по-прежнему поддерживают его), но возиться с ожиданиями пользователей - плохая идея.

Если пользователь вводит данные своей кредитной карты в форме, а затем позволяет кому-то другому использовать этот браузер, это не ваша проблема. :)

13
ответ дан sparkes 05 авг. '08 в 19:26
источник поделиться

Добавление

autocomplete="off"

в тег формы отключит автозаполнение браузера (что ранее было введено в это поле) из всех полей input в этой конкретной форме.

Протестировано:

  • Firefox 3.5, 4 BETA
  • Internet Explorer 8
  • Chrome
10
ответ дан Hash 11 февр. '11 в 8:14
источник поделиться

Это работает для меня.

<input name="pass" type="password" autocomplete="new-password" />

Мы также можем использовать эту стратегию в других элементах управления, таких как текст, выбор и т.д.

10
ответ дан Muhammad Awais 30 дек. '17 в 18:05
источник поделиться

Во избежание недопустимого XHTML вы можете установить этот атрибут с помощью javascript. Пример использования jQuery:

<input type="text" class="noAutoComplete" ... />

$(function() {
    $('.noAutoComplete').attr('autocomplete', 'off');
});

Проблема заключается в том, что пользователи без javascript будут получать функциональные возможности автозаполнения.

9
ответ дан cherouvim 12 дек. '10 в 21:34
источник поделиться

Добавление autocomplete="off" не режет его.

Измените атрибут типа ввода на type="search".
Google не применяет автоматическое заполнение к входам с типом поиска.

9
ответ дан Matas Vaitkevicius 28 окт. '15 в 19:32
источник поделиться

Немного поздно в игре... но я просто столкнулся с этой проблемой и попробовал несколько сбоев, но этот работает для меня на MDN

В некоторых случаях браузер будет продолжать предлагать значения автозаполнения даже если атрибут автозаполнения отключен. Это неожиданное поведение может быть довольно загадочным для разработчиков. Трюк на самом деле принудительное завершение - это назначить случайную строку атрибуту так:

autocomplete="nope"
9
ответ дан AAH-Shoot 22 марта '16 в 22:38
источник поделиться

Используйте нестандартное имя и идентификатор для полей, поэтому вместо имени введите "name_". Браузеры тогда не будут рассматривать это как поле имени. Лучшая часть этого - это то, что вы можете сделать это для некоторых, но не для всех полей, и будет автозаполнять некоторые, но не все поля.

8
ответ дан Teifion 05 авг. '08 в 19:27
источник поделиться

попробуйте их, если только autocomplete="off" не работает:

autocorrect="off" autocapitalize="off" autocomplete="off"
8
ответ дан jeff 04 дек. '12 в 21:24
источник поделиться

Я не могу поверить, что это все еще проблема до тех пор, пока не сообщается. Вышеупомянутые решения не сработали для меня, поскольку сафари, казалось, знали, когда элемент не был отображен или вне экрана, однако для меня это работало:

<div style="height:0px; overflow:hidden; ">
  Username <input type="text" name="fake_safari_username" >
  Password <input type="password" name="fake_safari_password">
</div>

Надеюсь, что это полезно для кого-то!

8
ответ дан Ben 23 апр. '16 в 14:02
источник поделиться

Это проблема безопасности, которую браузеры игнорируют сейчас. Браузеры идентифицируют и хранят контент с использованием имен ввода, даже если разработчики считают, что информация чувствительна и не должна храниться. Создание имени входа, отличного от 2 запросов, решит проблему (но будет сохранено в кеше браузера, а также увеличит кеш браузера). Попросить пользователя активировать или деактивировать параметры в настройках браузера не является хорошим решением. Проблема может быть исправлена в бэкэнд.

Вот мое исправление. Подход, который я реализовал в своих рамках. Все элементы автозаполнения генерируются со скрытым входом следующим образом:

<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
    <input type="text" name="<? echo $r; ?>" />
    <input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
    <input type="submit" name="submit" value="submit" />
</form>

Затем сервер обрабатывает пост-переменные следующим образом:

foreach ($_POST as $key => $val)
{
    if(preg_match('#^__autocomplete_fix_#', $key) === 1){
        $n = substr($key, 19);
        if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
    }
}

Значение можно получить, как обычно

var_dump($_POST['username']);

И браузер не сможет предложить информацию из предыдущего запроса или от предыдущих пользователей.

Все работает как шарм, даже если браузеры обновляются, хотят игнорировать автозаполнение или нет. Это был лучший способ исправить эту проблему для меня.

8
ответ дан Simmoniz 02 июня '15 в 23:37
источник поделиться

Ни один из упомянутых здесь хакеров не работал в Chrome. Здесь обсуждается проблема: https://code.google.com/p/chromium/issues/detail?id=468153#c41

Добавление этого внутри <form> работает (по крайней мере на данный момент):

<div style="display: none;">
    <input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>
7
ответ дан Jakob Løkke Madsen 02 июля '15 в 13:40
источник поделиться

Лучшее решение:

Запретить автозаполнение имени пользователя (или электронной почты) и пароля:

<input type="email" name="email"><!-- Can be type="text" -->
<input type="password" name="password" autocomplete="new-password">

Запретить автозаполнение поля:

<input type="text" name="field" autocomplete="nope">

Объяснение: autocomplete продолжает работу в <input>, autocomplete="off" не работает, но вы можете изменить off к случайной последовательности, как nope.

Работает в:

  • Хром: 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63 и 64

  • Firefox: 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57 и 58

7
ответ дан Cava 20 марта '18 в 7:31
источник поделиться

Попробуйте добавить

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

в дополнение к

autocomplete = "off"

на вход (-ы), который вы не хотите запоминать данные формы (username, password и т.д.), как показано ниже:

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

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

Протестировано в последних версиях основных браузеров, т.е. Google Chrome, Mozilla Firefox, Microsoft Edge и т.д. и работает без каких-либо проблем. Надеюсь, это поможет...

6
ответ дан Murat Yıldız 01 нояб. '17 в 16:26
источник поделиться

Итак, вот он:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">
5
ответ дан Stav Bodik 29 мая '16 в 22:57
источник поделиться

Вы можете использовать на входе.

Например:

<input type=text name="test" autocomplete="off" />
5
ответ дан xxxxx 02 нояб. '12 в 20:00
источник поделиться
  • 1
  • 2

Другие вопросы по меткам