Как отключить autocomplete
в основных браузерах для конкретного input
(или form field
)?
Как отключить autocomplete
в основных браузерах для конкретного input
(или form field
)?
Ответы:
Firefox 30 игнорирует autocomplete="off"
пароли, предпочитая вместо этого запрашивать у пользователя, должен ли пароль храниться на клиенте. Обратите внимание на следующий комментарий от 5 мая 2014 года:
- Менеджер паролей всегда запрашивает, хочет ли он сохранить пароль. Пароли не сохраняются без разрешения пользователя.
- Мы третий браузер, который внедрил это изменение после IE и Chrome.
Согласно документации Mozilla Developer Network , логический атрибут элемента autocomplete
формы предотвращает кэширование данных формы в старых браузерах.
<input type="text" name="foo" autocomplete="off" />
В дополнение к этому autocomplete=off
, вы также можете сделать так, чтобы имена полей формы были рандомизированы с помощью кода, который генерирует страницу, возможно, путем добавления некоторой специфичной для сеанса строки в конец имен.
Когда форма отправлена, вы можете удалить эту часть перед обработкой на стороне сервера. Это помешает веб-браузеру найти контекст для вашего поля, а также поможет предотвратить атаки XSRF, поскольку злоумышленник не сможет угадать имена полей для отправки формы.
$_SESSION['codefield_name'] = md5(uniqid('auth', true));
Большинство основных браузеров и менеджеров паролей (правильно, ИМХО) сейчас игнорируют autocomplete=off
.
Почему? Многие банки и другие веб-сайты с высоким уровнем безопасности добавляются autocomplete=off
на свои страницы входа «в целях безопасности», но это на самом деле снижает безопасность, так как люди автоматически меняют пароли на этих сайтах с высоким уровнем безопасности, чтобы их было легко запомнить (и, таким образом, взломать) после автозаполнения. был разбит.
Давным-давно большинство менеджеров паролей начали игнорировать autocomplete=off
, и теперь браузеры начинают делать то же самое только для ввода имени пользователя / пароля.
К сожалению, ошибки в реализациях автозаполнения вставляют информацию об имени пользователя и / или пароле в неподходящие поля формы, вызывая ошибки проверки формы или, что еще хуже, случайно вставляя имена пользователей в поля, которые пользователь намеренно оставил пустыми.
Что делать веб-разработчику?
К сожалению, Chrome 34 будет пытаться автоматически заполнять поля с помощью user / pass всякий раз, когда видит поле пароля. Это довольно плохая ошибка, которая, надеюсь, изменит поведение Safari. Однако добавление этого в верхнюю часть формы отключает автозаполнение пароля:
<input type="text" style="display:none">
<input type="password" style="display:none">
Я еще не исследовал IE или Firefox полностью, но буду рад обновить ответ, если у других есть информация в комментариях.
type='password'
полей на одной странице приводило к тому, что в браузере игнорировалось автозаполнение «сохранить пароль», что имело смысл, поскольку регистрационные формы, как правило, запрашивают пароль дважды, когда формы входа запрашивают его только один раз.
Иногда даже автозаполнения = выкл бы не допустить , чтобы заполнить учетные данные в неправильных полях, но не является пользователем или поле ник.
Этот обходной путь является дополнением к сообщению 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. Поскольку браузер является последним экземпляром, и вы не можете его контролировать,
Это исправление только для чтения сработало для меня.
readonly
удаляется, последующий выбор поля приводит к возврату автозаполнения.
<form name="form1" id="form1" method="post"
autocomplete="off" action="http://www.example.com/form.cgi">
Это будет работать в Internet Explorer и Mozilla FireFox, недостатком является то, что это не стандарт XHTML.
input type="password"
. Надеюсь, другие браузеры не захотят удалять эту функцию.
autocomplete="off"
на form
это единственное, что работало для Chrome.
Решением для 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
что ваши изменения вступили в силу, во многих случаях браузеры сохраняют страницу в кеше, у меня сложилось плохое впечатление, что она не работает, но браузер фактически не вносил изменения.
Как уже говорили другие, ответ autocomplete="off"
Тем не менее, я думаю, что стоит указать, почему в некоторых случаях рекомендуется использовать это, поскольку некоторые ответы на эти и повторяющиеся вопросы наводят на мысль, что лучше не выключать его.
Остановка браузеров, хранящих номера кредитных карт, не должна предоставляться пользователям. Слишком много пользователей даже не осознают, что это проблема.
Особенно важно отключить его в полях для кодов безопасности кредитных карт. Как говорится на этой странице :
«Никогда не сохраняйте защитный код ... его значение зависит от предположения, что единственный способ предоставить его - это прочитать его с физической кредитной карты, доказав, что лицо, его предоставляющее, действительно держит карту».
Проблема в том, что если это общедоступный компьютер (интернет-кафе, библиотека и т. Д.), То другие пользователи смогут легко украсть данные вашей карты, и даже на вашем компьютере вредоносный веб-сайт может украсть данные автозаполнения .
Я решил бесконечный бой с Google Chrome с использованием случайных символов. Когда вы всегда визуализируете автозаполнение со случайной строкой, оно никогда ничего не запомнит.
<input name="name" type="text" autocomplete="rutjfkde">
Надеюсь, что это поможет другим людям.
autocompleteoff
класс в желаемое поле ввода.
Мне пришлось бы просить не согласиться с теми ответами, которые говорят, чтобы избежать отключения автозаполнения.
Первое, что нужно упомянуть, это то, что автозаполнение, не отключаемое явно в полях формы входа, является ошибкой PCI-DSS. Кроме того, если локальный компьютер пользователя скомпрометирован, злоумышленник может получить любые данные автозаполнения, поскольку они хранятся в открытом виде.
Есть, конечно, аргумент в пользу юзабилити, однако существует очень хороший баланс, когда дело доходит до того, какие поля формы должны иметь отключенное автозаполнение, а какие нет.
Три варианта: Первый:
<input type='text' autocomplete='off' />
Во-вторых:
<form action='' autocomplete='off'>
В-третьих (код JavaScript):
$('input').attr('autocomplete', 'off');
На связанной или на самом деле, на совершенно противоположной ноте -
«Если вы являетесь пользователем вышеупомянутой формы и хотите снова включить функцию автозаполнения, используйте букмарклет« запомнить пароль »со страницы этой закладки . Он удаляет все
autocomplete="off"
атрибуты из всех форм на странице. Продолжайте бороться! "
Мы действительно использовали идею sasb для одного сайта. Это было медицинское программное приложение для управления кабинетом врача. Однако многие из наших клиентов были хирургами, которые использовали множество различных рабочих станций, в том числе полуобщественные терминалы. Поэтому они хотели убедиться, что врач, который не понимает смысла автоматически сохраняемых паролей или не обращает внимания, не может случайно оставить свои данные для входа легкодоступными. Конечно, это было до того, как идея частного просмотра стала появляться в IE8, FF3.1 и т. Д. Несмотря на это, многие врачи вынуждены использовать браузеры старой школы в больницах с ИТ, которые не изменятся.
Итак, у нас была страница входа, генерирующая случайные имена полей, которые работали бы только для этого поста. Да, это менее удобно, но это просто ударяет пользователя по поводу того, что он не хранит информацию для входа на общедоступных терминалах.
Ни одно из решений не помогло мне в этом разговоре.
Я наконец-то понял, что решение на чистом HTML не требует Javascript , работает в современных браузерах (кроме IE; нужно было хотя бы 1 перехват, верно?) И не требует отключения автозаполнения для всей формы.
Просто отключите автозаполнение на 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>
Просто установите autocomplete="off"
. Для этого есть очень веская причина: вы хотите предоставить собственную функцию автозаполнения!
Я пытался бесконечные решения, а потом я нашел это:
Вместо того, чтобы autocomplete="off"
просто использоватьautocomplete="false"
Это так просто, и это работает как шарм в Google Chrome!
Это работает для меня.
<input name="pass" type="password" autocomplete="new-password" />
Мы также можем использовать эту стратегию в других элементах управления, таких как текст, выделение и т. Д.
Я думаю, что autocomplete=off
поддерживается в HTML 5.
Спросите себя, почему вы хотите сделать это, хотя - это может иметь смысл в некоторых ситуациях, но не делайте это просто ради этого.
Это менее удобно для пользователей и даже не является проблемой безопасности в OS X (упомянутой Сореном ниже). Если вы беспокоитесь о том, что пароли пользователей могут быть украдены удаленно, регистратор нажатий клавиш может сделать это, даже если ваше приложение используетautcomplete=off
.
Как пользователь, который выбирает браузер, запоминающий (большую часть) мою информацию, я нахожу это раздражающим, если ваш сайт не запомнил мою.
Вдобавок к
autocomplete="off"
использование
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');" >
Надеюсь это поможет.
$(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
onfocusout="this.setAttribute('readonly', 'readonly');"
Лучшее решение:
Запретить автозаполнение имени пользователя (или электронной почты) и пароля:
<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
autocomplete
атрибута, и он по-прежнему отображает предыдущие записи в качестве предложений автозаполнения под вводом.
autocomplete
, я все равно получаю выпадающий список на основе ранее введенных значений. Это нормально на рабочем столе, но не на Android Chrome.
Немного опоздал к игре ... но я только столкнулся с этой проблемой и попробовал несколько сбоев, но этот работает для меня, найденный на MDN
В некоторых случаях браузер будет продолжать предлагать значения автозаполнения, даже если атрибут автозаполнения отключен. Такое неожиданное поведение может быть довольно загадочным для разработчиков. Хитрость для принудительного принудительного завершения - назначить случайную строку атрибуту следующим образом:
autocomplete="nope"
Добавление autocomplete="off"
не собирается сокращать это.
Измените атрибут типа ввода на type="search"
.
Google не применяет автозаполнение для входов с типом поиска.
Используйте нестандартное имя и идентификатор для полей, чтобы вместо «name» было «name_». Браузеры не увидят его как поле имени. Самое приятное в этом то, что вы можете сделать это с некоторыми, но не со всеми полями, и он автоматически заполнит некоторые, но не все поля.
Чтобы избежать недопустимого XHTML, вы можете установить этот атрибут, используя javascript. Пример использования jQuery:
<input type="text" class="noAutoComplete" ... />
$(function() {
$('.noAutoComplete').attr('autocomplete', 'off');
});
Проблема в том, что пользователи без JavaScript получат функцию автозаполнения.
Я не могу поверить, что это все еще проблема так долго после того, как об этом сообщили. Вышеуказанные решения не сработали для меня, так как сафари, казалось, знал, когда элемент не отображался или находился вне экрана, однако мне помогло следующее:
<div style="height:0px; overflow:hidden; ">
Username <input type="text" name="fake_safari_username" >
Password <input type="password" name="fake_safari_password">
</div>
Надеюсь, это кому-нибудь пригодится!
Итак, вот оно:
function turnOnPasswordStyle() {
$('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">
Это проблема безопасности, которую браузеры игнорируют сейчас. Браузеры идентифицируют и сохраняют контент, используя входные имена, даже если разработчики считают, что информация является конфиденциальной и не должна храниться. Изменение имени ввода между двумя запросами решит проблему (но все равно будет сохранено в кеше браузера, а также увеличит кэш браузера). Попросить пользователя активировать или деактивировать параметры в настройках своего браузера не является хорошим решением. Проблема может быть исправлена в бэкэнде.
Вот мое исправление. Подход, который я реализовал в моей структуре. Все элементы автозаполнения генерируются со скрытым вводом, подобным этому:
<? $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']);
И браузер не сможет предложить информацию из предыдущего запроса или от предыдущих пользователей.
Все работает как шарм, даже если браузер обновляет, хочет игнорировать автозаполнение или нет. Это был лучший способ решить проблему для меня.
Ни один из упомянутых здесь хаков не работал для меня в 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>
maxlength="0"
не позволяет Firefox автоматически заполнить поле.