Как отключить autocomplete
в основных браузерах для определенного input
(или form field
)?
Как отключить автозаполнение браузера в поле веб-формы/тег ввода?
Ответ 1
Firefox 30 игнорирует autocomplete="off"
для паролей, решая вместо этого предложить пользователю, должен ли пароль храниться на клиенте. Обратите внимание на следующий комментарий от 5 мая 2014 года:
- Менеджер паролей всегда запрашивает, хочет ли он сохранить пароль. Пароли не сохраняются без разрешения пользователя.
- Мы являемся третьим браузером, внедрившим это изменение, после IE и Chrome.
Согласно документации Mozilla Developer Network, логическое autocomplete
атрибута элемента формы предотвращает кэширование данных формы в старых браузерах.
<input type="text" name="foo" autocomplete="off" />
Ответ 2
В дополнение к autocomplete=off
вы также можете иметь имена полей форм, которые будут рандомизированы кодом, который генерирует страницу, возможно, добавив некоторую строку, относящуюся к сеансу, в конец имен.
Когда форма отправлена, вы можете снять эту часть перед ее обработкой на стороне сервера. Это помешает веб-браузеру найти контекст для вашего поля, а также может помочь предотвратить атаки XSRF, потому что злоумышленник не сможет угадать имена полей для представления формы.
Ответ 3
Большинство основных браузеров и менеджеров паролей (правильно, 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 полностью, но буду рад обновить ответ, если у других есть информация в комментариях.
Ответ 4
Иногда даже 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. Поскольку браузер является последним экземпляром, и вы не можете его контролировать,
Это исправление только для чтения работало для меня.
Ответ 5
<form name="form1" id="form1" method="post"
autocomplete="off" action="http://www.example.com/form.cgi">
Это будет работать в Internet Explorer и Mozilla FireFox, недостатком является то, что он не является стандартом XHTML.
Ответ 6
Решение для 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 ваши изменения вступили в силу, во многих случаях браузеры сохраняют страницу в кеше, это показало мне плохое впечатление, что она не работает, но браузер фактически не внес изменений.
Ответ 7
Как уже говорили другие, ответ autocomplete="off"
Тем не менее, я думаю, что стоит заявить, почему в некоторых случаях целесообразно использовать это, поскольку некоторые ответы на эти и повторяющиеся вопросы подсказывают, что лучше не выключать его.
Остановка браузеров, хранящих номера кредитных карт, не должна предоставляться пользователям. Слишком много пользователей даже не осознают, что это проблема.
Особенно важно отключить его в полях для кодов безопасности кредитных карт. Как говорится на этой странице:
"Никогда не сохраняйте защитный код... его значение зависит от предположения, что единственный способ предоставить его - это прочитать его с физической кредитной карты, доказав, что лицо, его предоставляющее, действительно держит карту".
Проблема в том, что если это общедоступный компьютер (интернет-кафе, библиотека и т.д.), То другие пользователи смогут легко украсть данные вашей карты, и даже на вашем собственном компьютере вредоносный веб-сайт может украсть данные автозаполнения.
Ответ 8
Мне пришлось бы просить отличаться от тех ответов, которые говорят, чтобы избежать отключения автоматического завершения.
Первое, что нужно понять, - это то, что автоматическое заполнение, не будучи явно отключенным в поля формы входа, является сбоем PCI-DSS. Кроме того, если локальная машина пользователя скомпрометирована, любые данные автозаполнения могут быть тривиально получены злоумышленником из-за того, что он хранится в ящике.
Конечно, есть аргумент в пользу удобства использования, однако есть очень тонкий баланс, когда дело доходит до того, какие поля формы должны иметь автозаполнение, и которые не должны.
Ответ 9
Три варианта: Сначала:
<input type='text' autocomplete='off' />
Второе:
<form action='' autocomplete='off'>
Третий (код javascript):
$('input').attr('autocomplete', 'off');
Ответ 10
Я решил бесконечный бой с Google Chrome с использованием случайных символов. Когда вы всегда визуализируете автозаполнение со случайной строкой, оно никогда ничего не запомнит.
<input name="name" type="text" autocomplete="rutjfkde">
Надеюсь, что это поможет другим людям.
Ответ 11
На связанной или на самом деле, на совершенно противоположной ноте -
"Если вы являетесь пользователем вышеупомянутой формы и хотите снова включить функцию автозаполнения, используйте букмарклет" запомнить пароль "со страницы этой закладки. Он удаляет все атрибуты
autocomplete="off"
из всех форм на странице. драться хороший бой!
Ответ 12
Просто установите autocomplete="off"
. Для этого есть очень веская причина: вы хотите предоставить свои собственные функции автозаполнения!
Ответ 13
Мы действительно использовали идею sasb для одного сайта. Это было веб-приложение для медицинского программного обеспечения для работы в офисе врача. Тем не менее, многие из наших клиентов были хирургами, которые использовали множество разных рабочих станций, в том числе полупубличных терминалов. Таким образом, они хотели удостовериться, что врач, который не понимает значения автоматически сохраненных паролей или не обращает внимания, не может случайно оставить свою регистрационную информацию легко доступной. Конечно, это было до идеи частного просмотра, который начинает отображаться в IE8, FF3.1 и т.д. Несмотря на это, многие врачи вынуждены использовать старые школьные браузеры в больницах с ИТ, которые не изменятся.
Итак, у нас была страница регистрации, генерирующая случайные имена полей, которые будут работать только для этого сообщения. Да, это менее удобно, но это просто поражает пользователя над головой, не сохраняя регистрационную информацию на публичных терминалах.
Ответ 14
Я пробовал бесконечные решения, и тогда я нашел это:
Вместо autocomplete="off"
просто используйте autocomplete="false"
Просто так, и он работает как шарм в Google Chrome.
Ответ 15
Я думаю, что autocomplete=off
поддерживается в HTML 5.
Спросите себя, почему вы хотите это сделать, хотя это может иметь смысл в некоторых ситуациях, но не делайте этого только ради этого.
Это менее удобно для пользователей и даже не проблема безопасности в OS X (упомянутый Сореном ниже). Если вы беспокоитесь о том, что люди, у которых их пароли украдены удаленно, - регистратор нажатий клавиш все еще может это сделать, даже если ваше приложение использует autcomplete=off
.
Как пользователь, который хочет, чтобы браузер помнил (большую часть) мою информацию, мне было бы неприятно, если бы ваш сайт не помнил мою.
Ответ 16
Ни один из решений не работал у меня в этом разговоре.
Наконец-то я понял, что чистый 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>
Ответ 17
Был нестандартный способ сделать это (я думаю, Mozilla и Internet Explorer по-прежнему поддерживают его), но возиться с ожиданиями пользователей - плохая идея.
Если пользователь вводит данные своей кредитной карты в форме, а затем позволяет кому-то другому использовать этот браузер, это не ваша проблема. :)
Ответ 18
Это работает для меня.
<input name="pass" type="password" autocomplete="new-password" />
Мы также можем использовать эту стратегию в других элементах управления, таких как текст, выбор и т.д.
Ответ 19
Попробуй добавить
readonly onfocus = "this.removeAttribute('readonly');"
в дополнение к
автозаполнения = "выключено"
на ввод (ы), которые вы не хотите запоминать данные формы (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');" >
Обновление: ниже приведен полный пример, основанный на этом подходе, который предотвращает перетаскивание, копирование, вставку и т.д.
<input type="text" name="UserName" style="text-transform:lowercase;" placeholder="Username"
autocomplete="off" readonly onfocus="this.removeAttribute('readonly');"
oncopy="return false" ondrag="return false" ondrop="return false"
onpaste="return false" oncontextmenu="return false" >
<input type="password" name="Password" placeholder="Password" autocomplete="off" readonly
onfocus="this.removeAttribute('readonly');" oncopy="return false" ondrag="return false"
ondrop="return false" onpaste="return false" oncontextmenu="return false" >
Протестировано на последних версиях основных браузеров, таких как Google Chrome
, Mozilla Firefox
, Microsoft Edge
и т.д., И работает без проблем. Надеюсь это поможет...
Ответ 20
Немного поздно в игре... но я просто столкнулся с этой проблемой и попробовал несколько сбоев, но этот работает для меня на MDN
В некоторых случаях браузер будет продолжать предлагать значения автозаполнения даже если атрибут автозаполнения отключен. Это неожиданное поведение может быть довольно загадочным для разработчиков. Трюк на самом деле принудительное завершение - это назначить случайную строку атрибуту так:
autocomplete="nope"
Ответ 21
Лучшее решение:
Запретить автозаполнение имени пользователя (или электронной почты) и пароля:
<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
Ответ 22
Добавление
autocomplete="off"
в тег формы отключит автозаполнение браузера (что ранее было введено в это поле) из всех полей input
в этой конкретной форме.
Протестировано:
- Firefox 3.5, 4 BETA
- Internet Explorer 8
- Chrome
Ответ 23
Используйте нестандартное имя и идентификатор для полей, поэтому вместо имени введите "name_". Браузеры тогда не будут рассматривать это как поле имени. Лучшая часть этого - это то, что вы можете сделать это для некоторых, но не для всех полей, и будет автозаполнять некоторые, но не все поля.
Ответ 24
Во избежание недопустимого XHTML вы можете установить этот атрибут с помощью javascript. Пример использования jQuery:
<input type="text" class="noAutoComplete" ... />
$(function() {
$('.noAutoComplete').attr('autocomplete', 'off');
});
Проблема заключается в том, что пользователи без javascript будут получать функциональные возможности автозаполнения.
Ответ 25
Добавление autocomplete="off"
не режет его.
Измените атрибут типа ввода на type="search"
.
Google не применяет автоматическое заполнение к входам с типом поиска.
Ответ 26
попробуйте их, если только autocomplete="off"
не работает:
autocorrect="off" autocapitalize="off" autocomplete="off"
Ответ 27
Это проблема безопасности, которую браузеры игнорируют сейчас. Браузеры идентифицируют и хранят контент с использованием имен ввода, даже если разработчики считают, что информация чувствительна и не должна храниться. Создание имени входа, отличного от 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']);
И браузер не сможет предложить информацию из предыдущего запроса или от предыдущих пользователей.
Все работает как шарм, даже если браузеры обновляются, хотят игнорировать автозаполнение или нет. Это был лучший способ исправить эту проблему для меня.
Ответ 28
Я не могу поверить, что это все еще проблема до тех пор, пока не сообщается. Вышеупомянутые решения не сработали для меня, поскольку сафари, казалось, знали, когда элемент не был отображен или вне экрана, однако для меня это работало:
<div style="height:0px; overflow:hidden; ">
Username <input type="text" name="fake_safari_username" >
Password <input type="password" name="fake_safari_password">
</div>
Надеюсь, что это полезно для кого-то!
Ответ 29
Ни один из упомянутых здесь хакеров не работал в 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>
Ответ 30
Итак, вот он:
function turnOnPasswordStyle() {
$('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">