Как отключить autocomplete
в основных браузерах для конкретного input
(или form field
)?
Firefox 30 игнорирует autocomplete="off"
пароли, предпочитая вместо этого запрашивать у пользователя, должен ли пароль храниться на клиенте. Обратите внимание на следующий комментарий от 5 мая 2014 года:
- Менеджер паролей всегда запрашивает, хочет ли он сохранить пароль. Пароли не сохраняются без разрешения пользователя.
- Мы являемся третьим браузером, внедрившим это изменение, после IE и Chrome.
Согласно документации Mozilla Developer Network , логический атрибут элемента autocomplete
формы предотвращает кэширование данных формы в старых браузерах.
<input type="text" name="foo" autocomplete="off" />
Используйте нестандартное имя и идентификатор для полей, чтобы вместо «name» было «name_». Браузеры не увидят его как поле имени. Самое приятное в этом то, что вы можете сделать это с некоторыми, но не со всеми полями, и он автоматически заполнит некоторые, но не все поля.
<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. Просто установите autocomplete="off"
. Для этого есть очень веская причина: вы хотите предоставить собственную функцию автозаполнения!
На связанной или на самом деле, на совершенно противоположной ноте -
«Если вы являетесь пользователем вышеупомянутой формы и хотите снова включить функцию автозаполнения, используйте букмарклет« запомнить пароль »со страницы этой закладки . Он удаляет все
autocomplete="off"
атрибуты из всех форм на странице. Продолжайте бороться! "
Почему вы сделали бы жизнь своего пользователя менее удобной?
«Пароли / данные кредитной карты / и т. Д. Не следует сохранять» - плохой аргумент: при автозаполнении браузеры в Mac OS X хранят такие значения в зашифрованной базе данных с разрешениями для каждого приложения. И наоборот, каков реалистический эффект autocomplete=off
? Пользователь собирается написать его в незашифрованном текстовом файле или, что еще лучше, в заметке, прикрепленной к экрану.
Хорошо, что есть букмарклеты, подобные упомянутому Antti, и патчи, заставляющие движок вообще игнорировать атрибут .
Серьезно, я призываю вас пересмотреть использование этого атрибута. Это никому не выгодно.
Мы действительно использовали идею sasb для одного сайта. Это было медицинское программное приложение для управления кабинетом врача. Однако многие из наших клиентов были хирургами, которые использовали множество различных рабочих станций, в том числе полуобщественные терминалы. Таким образом, они хотели убедиться, что врач, который не понимает смысла автоматически сохраняемых паролей или не обращает внимания, не может случайно оставить свою регистрационную информацию легко доступной. Конечно, это было до того, как идея частного просмотра стала появляться в IE8, FF3.1 и т. Д. Несмотря на это, многие врачи вынуждены использовать браузеры старой школы в больницах с ИТ, которые не изменятся.
Итак, у нас была страница входа, генерирующая случайные имена полей, которые работали бы только для этого поста. Да, это менее удобно, но это просто ударяет пользователя по поводу того, что он не хранит информацию для входа на общедоступных терминалах.
В дополнение к этому autocomplete=off
, вы также можете сделать так, чтобы имена полей формы были рандомизированы кодом, который генерирует страницу, возможно, путем добавления некоторой специфичной для сеанса строки в конец имен.
Когда форма отправлена, вы можете удалить эту часть перед обработкой на стороне сервера. Это не позволит веб-браузеру найти контекст для вашего поля, а также поможет предотвратить атаки XSRF, поскольку злоумышленник не сможет угадать имена полей для отправки формы.
$_SESSION['codefield_name'] = md5(uniqid('auth', true));
Как уже говорили другие, ответ autocomplete="off"
Тем не менее, я думаю, что стоит заявить, почему в некоторых случаях полезно использовать это, поскольку некоторые ответы на эти и повторяющиеся вопросы подсказывают, что лучше не выключать его.
Остановка браузеров, хранящих номера кредитных карт, не должна предоставляться пользователям. Слишком много пользователей даже не осознают, что это проблема.
Особенно важно отключить его в полях для кодов безопасности кредитных карт. Как говорится на этой странице :
«Никогда не сохраняйте защитный код ... его значение зависит от предположения, что единственный способ предоставить его - это прочитать его с физической кредитной карты, доказав, что лицо, поставившее его, действительно держит карту».
Проблема в том, что если это общедоступный компьютер (интернет-кафе, библиотека и т. Д.), То другие пользователи смогут легко украсть данные вашей карты, и даже на вашем компьютере вредоносный веб-сайт может украсть данные автозаполнения .
Чтобы избежать недопустимого XHTML, вы можете установить этот атрибут, используя javascript. Пример использования jQuery:
<input type="text" class="noAutoComplete" ... />
$(function() {
$('.noAutoComplete').attr('autocomplete', 'off');
});
Проблема в том, что пользователи без JavaScript получат функцию автозаполнения.
Добавление
autocomplete="off"
к тегу формы отключит автозаполнение браузера (что ранее было введено в это поле) из всех input
полей в этой конкретной форме.
Проверено на:
- Firefox 3.5, 4 бета
- Internet Explorer 8
- Хром
Я думаю, что autocomplete=off
поддерживается в HTML 5.
Спросите себя, почему вы хотите сделать это, хотя - это может иметь смысл в некоторых ситуациях, но не делайте это просто ради этого.
Это менее удобно для пользователей и даже не является проблемой безопасности в OS X (упомянутой Сореном ниже). Если вы беспокоитесь о том, что пароли пользователей могут быть украдены удаленно, регистратор нажатий клавиш может сделать это, даже если ваше приложение использует autcomplete=off
.
Как пользователь, который выбирает браузер, запоминающий (большую часть) мою информацию, я нахожу это раздражающим, если ваш сайт не запомнил мою.
Мне пришлось бы просить не согласиться с теми ответами, которые говорят, чтобы избежать отключения автозаполнения.
Первое, что нужно упомянуть, это то, что автозаполнение, не отключаемое явно в полях формы входа, является ошибкой PCI-DSS. Кроме того, если локальный компьютер пользователя скомпрометирован, злоумышленник может получить любые данные автозаполнения, поскольку они хранятся в открытом виде.
Конечно, есть аргумент в пользу юзабилити, однако, когда дело доходит до того, какие поля формы должны иметь отключенное автозаполнение, а какие нет, существует очень хороший баланс.
Вы можете использовать при вводе.
Например;
<input type=text name="test" autocomplete="off" />
попробуйте это тоже, если просто autocomplete="off"
не работает:
autocorrect="off" autocapitalize="off" autocomplete="off"
Три варианта: Первый:
<input type='text' autocomplete='off' />
Во-вторых:
<form action='' autocomplete='off'>
В-третьих (код JavaScript):
$('input').attr('autocomplete', 'off');
Ни одно из решений не помогло мне в этом разговоре.
Я наконец-то понял, что решение на чистом 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=off
, и теперь браузеры начинают делать то же самое только для ввода имени пользователя / пароля.
К сожалению, ошибки в реализациях автозаполнения вставляют информацию об имени пользователя и / или пароле в неподходящие поля формы, вызывая ошибки проверки формы или, что еще хуже, случайно вставляя имена пользователей в поля, которые пользователь намеренно оставил пустыми.
Что делать веб-разработчику?
- Если вы можете сохранить все поля пароля на странице сами по себе, это хорошее начало, так как кажется, что наличие поля пароля является основным триггером для срабатывания автозаполнения пользователя / пароля. В противном случае прочитайте советы ниже.
- Safari замечает, что есть 2 поля пароля, и в этом случае отключает автозаполнение, предполагая, что это должна быть форма смены пароля, а не форма входа. Поэтому обязательно используйте 2 поля пароля (новый и подтвердите новый) для любых форм, где вы разрешаете
К сожалению, 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
удаляется, последующий выбор поля приводит к возврату автозаполнения. Я пробовал бесконечные решения, а потом я нашел это:
Вместо того, чтобы autocomplete="off"
просто использоватьautocomplete="false"
Это так просто, и это работает как шарм в Google Chrome!
Это проблема безопасности, которую браузеры игнорируют сейчас. Браузеры идентифицируют и сохраняют контент, используя входные имена, даже если разработчики считают, что информация является конфиденциальной и не должна храниться. Изменение имени входа между двумя запросами решит проблему (но все равно будет сохранено в кеше браузера, а также увеличит кэш браузера). Попросить пользователя активировать или деактивировать параметры в настройках своего браузера не является хорошим решением. Проблема может быть исправлена в бэкэнде.
Вот мое исправление. Подход, который я реализовал в моей структуре. Все элементы автозаполнения генерируются со скрытым вводом, подобным этому:
<? $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 автоматически заполнить поле. Я знаю, что это старый пост, но может быть важно знать, что Firefox (я думаю, что только firefox) использует значение, ismxfilled
которое в основном вызывает автозаполнение.
ismxfilled="0"
за OFF
или
ismxfilled="1"
за ON
Добавление autocomplete="off"
не собирается сокращать это.
Измените атрибут типа ввода на type="search"
.
Google не применяет автозаполнение для входов с типом поиска.
Safari не меняет свое мнение об автозаполнении, если вы устанавливаете autocomplete="off"
динамически из javascript. Тем не менее, это будет уважать, если вы делаете это на основе поля.
$(':input', $formElement).attr('autocomplete', 'off');
<script language="javascript" type="text/javascript">
$(document).ready(function () {
try {
$("input[type='text']").each(function(){
$(this).attr("autocomplete","off");
});
}
catch (e)
{ }
});
</script>
Chrome планирует поддержать это .
На данный момент лучшее предложение - использовать тип ввода, который редко заполняется автоматически.
<input type='search' name="whatever" />
чтобы быть совместимым с firefox, используйте обычный autocomplete = 'off'
<input type='search' name="whatever" autocomplete='off' />
Вы можете отключить автозаполнение, если вы удалите form
тег, то же самое было сделано моим банком, и мне было интересно, как они это сделали. Он даже удаляет значение, которое уже запомнилось браузером после удаления тега.
Это то, что мы назвали автозаполнением текстового поля.
Мы можем отключить автозаполнение текстового поля двумя способами:
Перейдите в предварительные настройки и снимите флажок, а затем Восстановите.
Если вы хотите отключить в коде метки, вы можете сделать следующее :
Использование AutoCompleteType="Disabled"
:
<asp:TextBox runat="server" ID="txt_userid" AutoCompleteType="Disabled"></asp:TextBox>
Установив форму autocomplete="off"
:
<asp:TextBox runat="server" ID="txt_userid" autocomplete="off"></asp:TextBox>
Установив форму autocomplete="off"
:
<form id="form1" runat="server" autocomplete="off">
//your content
</form>
Используя код на странице .cs
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
txt_userid.Attributes.Add("autocomplete", "off");
}
}
Используя Jquery
head runat="server">
<title></title>
<script src="Scripts/jquery-1.6.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#txt_userid').attr('autocomplete', 'off');
});
</script>
Немного опоздал к игре ... но я только столкнулся с этой проблемой и попробовал несколько сбоев, но этот работает для меня, найденный на MDN
В некоторых случаях браузер будет продолжать предлагать значения автозаполнения, даже если атрибут автозаполнения отключен. Такое неожиданное поведение может быть довольно загадочным для разработчиков. Хитрость для принудительного принудительного завершения - это присвоить атрибуту случайную строку следующим образом:
autocomplete="nope"