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

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

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

Simon_Weaver 22.11.2009 08:15

Попробуйте github.com/terrylinooo/disableautofill.js, он использует JavaScript, чтобы пропустить функцию автозаполнения из браузера.

Terry Lin 25.02.2021 11:50
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2 938
2
1 216 391
85
Перейти к ответу Данный вопрос помечен как решенный

Ответы 85

Ответ принят как подходящий

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

  • The password manager always prompts if it wants to save a password. Passwords are not saved without permission from the user.
  • We are the third browser to implement this change, after IE and Chrome.

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

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

У меня это не сработало в Firefox 3.0.3. Мне пришлось поместить атрибут автозаполнения в ФОРМУ, а не во ВХОД.

Winston Fassett 12.11.2008 07:11

Автозаполнение определено только в стандартах HTML 5, поэтому оно нарушит любые проверки, которые вы выполняете в отношении HTML 4. * ...

Jrgns 19.01.2009 11:04

@Winston, вы должны поместить его как в форму, так и в сам элемент ввода. Таким образом вы покроете всю нестандартность браузеров.

AviD 13.12.2010 15:11

И не забудьте отключить расширение autocomplete = on (если вы используете Chrome), прежде чем тестировать свое веб-приложение. Иначе ты будешь чувствовать себя такой же глупой, как я. ;)

Jo Liss 26.02.2011 03:57

Этот вопрос / ответ сейчас может быть старым, но я скажу, что Firefox 15, похоже, вводит пароль, несмотря на autocomplete = "off" в элементах ввода и формы. Он также заполняет его, даже если вы измените имя и идентификатор поля пароля. Это если пароль уже сохранен. Теперь, похоже, это предотвращает сохранение пароля, если он еще не был.

mikato 28.09.2012 18:31

Кроме того, KeeFox, расширение Firefox для использования KeePass для хранения ваших паролей, мешает этому и заполняет пароль в любом случае, если он был сохранен ранее.

Pierre Henry 05.02.2013 12:32

Этот код также запрещает показывать сохраненные имена пользователей и пароли?

Silvio Delgado 26.02.2013 00:08

Последние версии Firefox> 20 (более старые не тестировались) не запрашивают сохранение имени пользователя и пароля, если в форме указан autocomplete=off.

unode 27.02.2014 21:51

С помощью jquery: $ (документ) .ready (функция () {$ ('input [type = "text"], select'). Val ('')});

e-info128 04.03.2014 18:54

Chrome также игнорирует это (для полей пароля) в патче кода в феврале 2014 года: groups.google.com/a/chromium.org/forum/#!topic/chromium-dev/‌…

Simon East 27.06.2014 07:53

Это больше не работает, по крайней мере, для полей логина / пароля. Код в ответе апинштейна все еще работает.

Sam Watkins 19.05.2015 07:47

так что же делать, когда (в хроме) я отключил автозаполнение и использовал случайные атрибуты имени для входных данных, а пароль имени пользователя И все еще отображается ??

RWolfe 07.07.2015 17:29

Вы должны установить для автозаполнения любое значение, кроме «включено» или «выключено». Тогда он фактически отключится. Я знаю, что это верно для Chrome, но я не тестировал его в других браузерах. stackoverflow.com/questions/30053167/autocomplete-off-vs-fal‌ se /…

camiblanch 14.07.2015 19:41

@swapab больше нет :(

Brandito 10.04.2018 09:48

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

NOYB 06.07.2018 06:58

Для Chrome: autocomplete = "nope" Это кажется забавным, но работает! Однако это не сработает для Firefox или других браузеров. Для них вы можете добавить autocomplete = "off" в элемент формы. Если вы используете веб-формы, ваш элемент формы находится на главной странице.

Amir Tofighi 08.08.2018 23:10

Используя случайные символы вроде этого: <input name="name" type="text" autocomplete="rutjfkde">, хром никогда не запомнит значение. Когда вы генерируете тег <input> на бэкэнде, генерируйте случайную строку. Простое рабочее решение.

step 27.03.2019 19:13

Я обнаружил, что некоторые более поздние «умные» браузеры экстраполируют и принимают решения об автозаполнении на основе ближайшего текстового содержимого в форме. Например, если непосредственно перед полем ввода text стоит текст «Имя:», то браузеры, такие как Safari, начнут получать предложения из самых отдаленных мест, например из контактной книги вашей ОС. Одно из решений этого - более умное (читай: «идиосинкразическое») наименование, чем очевидные варианты, такие как «Имя».

Parapluie 13.05.2019 17:56

этот ответ может потребовать обновления developer.mozilla.org/en-US/docs/Web/Security/…

mh-cbon 18.06.2019 18:22

В последнем firefox (v69.0) я могу отключить автозаполнение только глобально, используя его внутри формы:

<form autocomplete="off" ...></form>
gtamborero 12.09.2019 14:31

@AviD На самом деле, правильный способ сделать это - выключить его в форме. Таким образом, он отключит автозаполнение для каждого входного элемента и не будет иметь никаких резервных выходов автозаполнения. Когда этот параметр отключен в форме, вы все равно можете указать отдельные элементы ввода для их автозаполнения. Будет намного чище. Ваш ответ старый, но я хотел добавить это примечание.

ravo10 10.10.2019 12:21

@ ravo10 Я надеюсь, что 9 лет спустя эта дурацкая идиосинкразия наконец разрешится :-)

AviD 10.10.2019 16:05

@AviD Ха-ха, да.

ravo10 11.10.2019 20:20

Обязательно посмотрите ответ @Geynen, в котором используется autocomplete = "new-password".

splashout 19.05.2020 23:17

Я думаю, что мое решение может обойти все это, чтобы нам больше не приходилось беспокоиться о браузерах? по крайней мере, на какое-то время ... возможно, его нужно будет доработать и улучшить, но общая идея есть и, похоже, работает на дату публикации. stackoverflow.com/a/64499109/6730421

Adam Whateverson 23.10.2020 19:32
MozillaDoc: „Even without a master password, in-browser password management is generally seen as a net gain for security. Since users do not have to remember passwords that the browser stores for them, they are able to choose stronger passwords than they would otherwise. For this reason, many modern browsers do not support autocomplete = "off" for login fields“
tibx 09.11.2020 11:01

Используйте нестандартные имя и идентификатор для полей, поэтому вместо «name» используйте «name_». Тогда браузеры не будут рассматривать его как поле имени. Самое приятное в этом то, что вы можете сделать это с некоторыми, но не со всеми полями, и он будет автоматически заполнять некоторые, но не все поля.

Проблема в том, что если какие-либо другие сайты используют "name_" для достижения той же цели, тогда вы вернетесь к исходной точке.

ConroyP 20.10.2008 13:01

так что сделайте это "mysite_name". Если кто-то еще этим пользуется, я бы задавал им вопросы ...

Steve Perks 13.05.2009 16:50

это выводит из строя некоторые из этих автоматических заполняемых утилит.

Simon_Weaver 22.11.2009 08:11

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

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

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

sholsinger 10.05.2010 20:48

На самом деле @sholsinger, лучше всего поместить его как в форму, так и в сам элемент ввода. Таким образом вы покроете всю нестандартность браузеров.

AviD 13.12.2010 15:11

К сожалению, начиная с IE 11, Microsoft больше не уважает это для input type = "password". Надеюсь, ни один другой браузер не откажется от этой функции.

SamHuckaby 22.03.2014 01:18

Установка autocomplete = "off" на form - единственное, что сработало для Chrome.

Andrew 09.02.2016 21:41

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

По родственной или совершенно противоположной ноте -

"If you're the user of the aforementioned form and want to re-enable the autocomplete functionality, use the 'remember password' bookmarklet from this bookmarklets page. It removes all autocomplete = "off" attributes from all forms on the page. Keep fighting the good fight!"

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

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

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

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

Это намного лучшее решение по сравнению с использованием autocomplete = "off". Все, что вам нужно сделать, это сгенерировать новое имя при каждой загрузке страницы и сохранить это имя в $ _SESSION для будущего использования: $_SESSION['codefield_name'] = md5(uniqid('auth', true));

enchance 13.11.2011 13:03

Нет, это не лучшее решение, потому что источником предпочтения для этого параметра является пользовательский агент, также известный как веб-браузер. Существует разница между поддержкой определенного поведения (которое пытается выполнить HTML 5) и принуждением к нему путем принятия решения от имени пользователя, что, по вашему мнению, является «гораздо лучшим решением».

amn 27.05.2013 21:09

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

macguru2000 16.05.2014 01:34

Что касается атак XSRF, я не уверен, какой тип атаки вы представляли, но не мог ли злоумышленник просто отрезать конечную часть так же, как вы делаете это на стороне сервера, чтобы идентифицировать поля? Или, если злоумышленник публикует поля, не могли ли они добавить свою собственную случайную строку, поскольку она будет удалена сервером?

xr280xr 11.02.2015 23:10

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

whoadave 06.05.2015 05:01

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

jezzipin 27.10.2015 17:15

@ xr280xr Нет, если добавляемая строка является идентификатором сеанса (или другим сгенерированным значением для конкретного сеанса). Затем идентификаторы ввода POST формы будут проверены на соответствие сеансу, который фактически создал сам HTML.

Mike U 12.12.2015 01:09

@jezzipin: Вам не нужно использовать модель с MVC. Просто используйте общий параметр FormCollection и получите доступ к именам / значениям.

Gone Coding 31.03.2016 18:55

Примечание: рандомизация имен полей не помогает в более поздних браузерах IE. Он просто обнаруживает первое поле пароля (с любым именем) и автоматически заполняет поле перед ним.

Gone Coding 26.08.2016 17:16

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

Gras Double 09.08.2017 20:16

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

JwJosefy 16.04.2018 18:05

Не могу поверить, что это все еще проблема. Я понимаю, что «пользователь должен иметь контроль», однако есть случаи, когда автозаполнение не имеет смысла. Например, последнее, что вам нужно в приложении для ввода данных, т. Е. На стойке регистрации, - это предварительно заполнить последнюю запись. Существует множество вариантов использования корпоративных приложений за пределами стандартной модели оформления заказа в электронной коммерции, для которых Chrome / firefox обслуживают.

ChronoFish 12.07.2018 16:22

Chrome (и, возможно, другие) в настоящее время, кажется, выводит автозаполнение через атрибут <input>placeholder. Если этот заполнитель содержит "name", он также предложит автозаполнение независимо от значения атрибута name. Таким образом, это решение не будет работать, если вы хотите остановить автозаполнение для ввода, такого как <input name = "foobar" placeholder = "First name">.

shennan 04.07.2019 02:03

Я использовал эту технику в старом приложении веб-форм ASP.NET, спасибо. У меня есть UserControl, который инкапсулирует текстовое поле, расширенное с помощью jQuery AutoComplete. Автозаполнение браузера скрывает автозаполнение до тех пор, пока я не добавлю случайное целое число к идентификатору TextBox в обработчике событий Page_Init. После создания это случайное целое число нужно было сохранить как переменную сеанса, потому что Page_Init запускает каждое сообщение обратно и по какой-то причине ViewState недостаточно хорош.

CAK2 18.06.2020 19:47

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

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

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

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

"Never store the security code ... its value depends on the presumption that the only way to supply it is to read it from the physical credit card, proving that the person supplying it actually holds the card."

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

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

Simon_Weaver 22.11.2009 08:13

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

rjmunro 17.12.2015 16:35

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

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

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

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

это не исключает недопустимый xhtml, он просто динамически добавляет недопустимый бит после того, как вы проверили его, он объявил его действительным!

Andiih 16.04.2011 19:53

@Andiih: Так есть ли способ заставить работать автозаполнение в xhtml?

cherouvim 22.04.2011 19:14

Работать (или прекратить работу, что является целью): да, как указано выше. Но действительно - нет.

Andiih 25.04.2011 14:46

Добавление

autocomplete = "off"

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

Проверено на:

  • Firefox 3.5, 4 БЕТА
  • Internet Explorer 8
  • Хром

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

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

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

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

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

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

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

Я только что обратил внимание на то, что IE не запускает события onChange, когда вы вводите текст с помощью автозаполнения. У нас есть десятки форм и более тысячи событий onChange (проверки ввода, бизнес-логика), разбросанных по ним. Недавно мы обновили IE до более новой версии, и внезапно начали происходить странные вещи. К счастью, у нас есть приложение для интрасети, и автозаполнение не является проблемой для нас, проще просто отключить его.

Robotronx 09.06.2015 16:36

Если локальная машина пользователя скомпрометирована, они облажались, точка. В нем может быть установлен кейлоггер, может быть добавлен поддельный корневой сертификат SSL и все отправлено через ложный прокси и т. д. У меня есть реальная причина отключить автозаполнение - когда я вхожу в систему как администратор и посещаю страницу редактирования пользователя, он назначает этот пользователь мое имя пользователя и пароль администратора. Мне нужно предотвратить такое поведение.

rjmunro 17.12.2015 16:48

Производители браузеров, похоже, заботятся о своих интересах. Сохраненные пароли = блокировка пользователя. А включение / выключение автозаполнения было слишком простым - почему бы не использовать сложный стандарт семантических подсказок (html.spec.whatwg.org/multipage/…), который, кстати, позволяет браузеру собирать ценные семантические данные с сайтов, которые посещает каждый пользователь?

aro_tech 21.11.2017 16:38

конкретный вариант использования, который я пытаюсь решить, заключается в следующем: они уже вошли в систему. но теперь они собираются получить доступ к чему-то еще более важному. Я хочу показать диалог, который заставит их повторно пройти аутентификацию, исключив возможность того, что они пошли покурить, а плохой человек сел на их стул. попробовали несколько техник, чтобы обойти автозаполнение, но ничего не помогло. теперь я думаю, может быть, по крайней мере, использовать старый добрый 'password = window.prompt («Пожалуйста, повторно введите свой пароль»)' плюс имя пользователя в сеансе, и попытаться подтвердить его.

David 12.01.2018 21:09

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

Например;

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

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

autocorrect = "off" autocapitalize = "off" autocomplete = "off"

autoComplete для React ... 0,02 $

Neil Guy Lindberg 13.08.2020 20:24

Три варианта: Первый:

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

Второй:

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

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

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

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

rybo111 14.06.2015 00:35

Пробовал $ formElement.attr ('autocomplete', 'off'); и это не работает.

Ben Affleck 01.11.2015 13:23

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

Я наконец выяснил, что чистое решение 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>

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

Почему? Многие банки и другие веб-сайты с высоким уровнем безопасности добавили autocomplete=off на свои страницы входа «в целях безопасности», но это фактически снижает безопасность, поскольку заставляет людей менять пароли на этих сайтах с высоким уровнем безопасности, чтобы их было легко запомнить (и, следовательно, взломать), поскольку автозаполнение было нарушено.

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

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

Что делать веб-разработчику?

  • Если вы можете сохранить все поля пароля на странице сами по себе, это отличное начало, поскольку кажется, что наличие поля пароля является основным триггером для срабатывания автозаполнения пользователя / пароля. В противном случае прочитайте советы ниже.
  • Сафари замечает, что есть 2 поля пароля, и отключает автозаполнение в этом случае, предполагая, что это должна быть форма смены пароля, а не форма входа. Поэтому просто обязательно используйте 2 поля пароля (новый и подтвердите новый) для любых форм, в которых вы разрешаете
  • Хром 34, к сожалению, будет пытаться автоматически заполнять поля с помощью user / pass всякий раз, когда видит поле пароля. Это довольно плохая ошибка, которая, надеюсь, изменит поведение Safari. Однако добавление этого в верхнюю часть формы, похоже, отключает автозаполнение пароля:

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

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

что вы имеете в виду, говоря "добавление этого на вашу страницу, кажется, отключает автозаполнение для страницы:"

wutzebaer 07.05.2014 14:31

@wutzebaer, Chrome замечает скрытое поле пароля и останавливает автозаполнение. Как сообщается, это сделано для предотвращения кражи информации о пароле сайтом без ведома пользователя.

David W 02.12.2014 02:05

Ваш фрагмент кода предотвращает автозаполнение полей входа в систему в Chrome, Firefox, IE 8 и IE 10. Не тестировал IE 11. Хороший материал! Единственный простой ответ, который все еще работает.

Sam Watkins 19.05.2015 07:44

Как это применимо к другим полям ввода, таким как email или кредитные карты? У нас есть проблема с тем, что браузеры думают, что коробка email предназначена для них, тогда как это для кого-то другого.

Kelsey Hannan 24.05.2015 07:58

Ваша заметка о сафари, похоже, работает и в Chrome, по крайней мере, по состоянию на декабрь 2015 года. У меня было поле имени пользователя и пароля в регистрационной форме, которое автоматически заполнялось данными из формы входа. Создание двух полей type='password' на одной странице привело к игнорированию автозаполнения «сохранить пароль» браузера, что имело смысл, поскольку регистрационные формы, как правило, запрашивают пароль дважды, тогда как формы входа запрашивают его только один раз.

Matt Fletcher 20.12.2015 23:27

Кажется, что больше не работает в Chrome 55, если только дополнительное поле пароля не скрыто, что противоречит цели.

jokkedk 10.10.2016 12:06

@jokkedk Я обнаружил, что вместо display: none; вы можете использовать position: relative; left: -1000px;, и это помогает мне в Chrome. Технически не скрыт, а просто отображается за кадром.

crazyloonybin 18.10.2016 17:13

Больше не работает, Chrome 54 автоматически заполняет все найденные поля имени пользователя и пароля.

Stijn Van Bael 20.10.2016 14:46

@StijnVanBael В Chrome 54 вы можете использовать style = "visibility: hidden; height: 0;" Works для меня.

Finrod 24.10.2016 18:19

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

Stijn Van Bael 24.10.2016 18:44

Мне нужно было добавить name = "email" и name = "password" к input, прежде чем это решение сработало. но это случилось! (хотя я чувствую себя очень грязно, потому что я «знаю», что браузер выполняет автозаполнение те вместо)

MoshMage 10.02.2017 18:31

@apinstein, но когда вы создаете форму для администраторов для регистрации пользователей, например, Chrome автоматически заполняет поля имени пользователя и пароля в этой форме, что определенно не является желаемым поведением для такой формы.

Andy 30.10.2017 22:00

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

JAR.JAR.beans 22.11.2017 17:45

Извините, я не согласен (вообще) с тем, что автозаполнение паролей - хорошая идея - по той очевидной причине, что он позволяет любому подойти к вашему ПК, планшету или другому устройству и увидеть ваш пароль. Еще хуже то, что мы не можем - за исключением постоянно развивающегося и непоследовательного набора браузерных хаков - предотвратить это в ситуациях, когда мы точно знаем, что это плохая идея. Я видел это, когда вводил пароль с помощью функции отображения / скрытия пароля - если вы (или кто-либо другой) решите «Показать» пароль, тогда будет выпадающий список всех паролей, которые были использованы для этого ввода. МОЙ БОГ.

Geoff Kendall 28.03.2018 14:32

Но @DavidW на веб-сайте уже говорится о том, что вводится где ... Так работают формы. Мы можем получить доступ к данным, которые пользователи вводят в форму, с запросом сервера / отправкой формы или без него.

Brandito 29.06.2018 08:29

@Brandito, мы хотим скрыть другие конфиденциальные данные, такие как SSN, от людей, заглядывающих через плечо.

David W 04.07.2018 19:49

Ааааааааааааааааааааааааааадек)) вы меня сначала запутали этой частью: prevent the сайтstealing password info without the user noticing

Brandito 05.07.2018 04:44

ИМХО принуждать веб-разработчиков использовать хак вместо открытого стандарта - это неправильно. Веб-сайты с «высокой степенью защиты» также могут использовать эти взломы.

dehart 27.09.2019 15:25

Исходный пост относится к полям ввода в целом, без ссылки на поля пароля. Я только что протестировал автозаполнение для стандартного ввода текста в Firefox 70.0.1, и он учитывает атрибут.

Savage 20.11.2019 14:09

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

Этот обходной путь дополняет сообщение апинштейна о поведении браузера.

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

 <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. Поскольку браузер является последним экземпляром, и вы не можете его контролировать,

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

Если нет javascript, вся форма не работает. -1

Jimmy Kane 10.07.2014 14:56

@JimmyKane, ключом было бы также добавить атрибут с использованием javascript в первую очередь (что dsuess здесь не сделал, а просто добавил для полноты).

trnelson 27.03.2015 20:58

@tmelson Я понимаю, но все же зачем использовать js для отключения? Давайте избегать js для вещей, которые можно улучшить изначально. Опять же, я согласен с вами.

Jimmy Kane 27.03.2015 23:29

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

Sam Watkins 19.05.2015 07:57

Благодаря этому нет правильно работает во всех браузерах (например, IE 11 и IE Edge). Как только readonly удаляется, последующий выбор поля приводит к возврату автозаполнения.

Gone Coding 26.08.2016 17:18

Это действительно хорошая идея! Только при использовании Bootstrap это создаст серый фон для полей ввода readonly. Удалите его с помощью style = "background:none"

Arnis Juraga 05.10.2017 00:58

Отлично работает на v63 chrome, есть ли проблемы с безопасностью?

Palaniichuk Dmytro 18.01.2018 15:14

@PalaniichukDmytro Я не знаю никаких «проблем с безопасностью», и последние 3 года этот ответ публикуется, никто не упоминал о каких-либо проблемах с безопасностью. Надеюсь, это поможет :)

dsuess 24.01.2018 19:26

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

M. Altmann 17.05.2018 15:59

В моей ситуации пользователь также не должен иметь возможность редактировать, так что это отлично работает!

wedstrom 02.03.2019 00:07

В некоторых версиях IE вам нужно дважды щелкнуть (сначала сфокусироваться, затем сфокусироваться, я думаю). Я исправил это, добавив событие onmouseover.

baron_bartek 05.04.2019 15:52

Я пробовал бесконечные решения, а потом нашел следующее:

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

Все очень просто, и это прекрасно работает и в Google Chrome!

Как вы сказали в хроме, значение выключения не работает. Это должно быть «ложно»

azuax 14.05.2015 06:31

У меня работает на Chrome 44.0.2403.130.

GuiGS 13.08.2015 05:33

Пробовал это: $ formElement.attr ('autocomplete', 'false'); жаль не работает.

Ben Affleck 01.11.2015 13:24

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

Изменение имени входа для двух запросов решит проблему (но все равно будет сохранено в кеше браузера, а также увеличит кеш браузера).

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

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

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

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

foreach ($_POST as $key => $val) {
    $newKey = preg_replace('~^__autocomplete_fix_~', '', $key, 1, $count);
    if ($count) {
        $_POST[$val] = $_POST[$newKey];
        unset($_POST[$key], $_POST[$newKey]);
    }
}

К значению можно получить доступ как обычно

echo $_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>

Обратите внимание, что при использовании этой техники FireFox по-прежнему будет автоматически заполнять это скрытое поле, которое будет включено при отправке формы. Скорее всего, это будет плохо, так как пароль будет передаваться по потенциально незащищенному соединению. К счастью, добавление maxlength = "0" не позволяет firefox автоматически заполнять поля.

Mikal Schacht Jensen 07.11.2017 15:30

Я знаю, что это старый пост, но может быть важно знать, что Firefox (я думаю, только firefox) использует значение ismxfilled, которое в основном вызывает автозаполнение.

ismxfilled = "0" для OFF

или же

ismxfilled = "1" для ON

Добавление autocomplete = "off" никуда не годится.

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

Это взлом. Поле не является полем поиска. В будущем это может вызвать неприятности.

Roel 31.12.2015 16:24

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>

Чем это отличается от установки autocomplete = off в html, которая в наши дни не работает?

Andrew 08.11.2018 19:29

Chrome - это планирую поддержать это.

На данный момент лучшим предложением является использование типа ввода, который редко заполняется автоматически.

хром обсуждение

<input type='search' name = "whatever" />

чтобы быть совместимым с firefox, используйте обычный autocomplete = 'off'

<input type='search' name = "whatever" autocomplete='off' />

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

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

  1. По ярлыку браузера
  2. По коду

    Для отключения в браузере перейдите в настройку

    To dissable in browse go to the setting

Go to advance setting and uncheck the checkbox and then Restore.

Перейдите к расширенным настройкам и снимите флажок, а затем - Восстановить.

Если вы хотите отключить метку кодирования, вы можете сделать это следующим образом:
Используя 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

In some case, the browser will keep suggesting autocompletion values even if the autocomplete attribute is set to off. This unexpected behavior can be quite puzzling for developers. The trick to really force the no-completion is to assign a random string to the attribute like so :

autocomplete = "nope"

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

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

Надеюсь, это кому-нибудь пригодится!

Итак, если поставить это перед фактическими полями имени пользователя и пароля? браузер заполнил те, а не настоящие

Andrew 08.11.2018 19:54

Если ваша проблема связана с автоматическим заполнением поля пароля, вы можете найти это полезным ...

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

<!-- This is a fake password input to defeat the browser's autofill behavior -->
<input type = "password" id = "txtPassword" style = "display:none;" />
<!-- This is the real password input -->
<input type = "password" id = "txtThisIsTheRealPassword" />

Обратите внимание, что в Firefox и IE было достаточно просто поместить любой ввод типа пароля перед фактическим, но Chrome увидел это и заставил меня на самом деле назвать ввод поддельного пароля (дав ему очевидный идентификатор пароля), чтобы получить его "кусать". Я использовал класс для реализации стиля вместо использования встроенного стиля, поэтому попробуйте это, если по какой-то причине вышеперечисленное не работает.

Вы можете просто поместить autocomplete = "off" в поля HTML, как показано ниже.

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

Итак, вот оно:

function turnOnPasswordStyle() {
  $('#inputpassword').attr('type', "password");
}
<input oninput = "turnOnPasswordStyle()" id = "inputpassword" type = "text">

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

Andrew 08.11.2018 19:33

Большое спасибо, это выполнило задание +1, мой вариант вашего решения заключался в том, чтобы сделать это одной строкой: <input oninput="this.type='password'" id="inputpassword" type="text">

Hasnaa Ibraheem 21.02.2019 13:43

@HasnaaIbraheem Спасибо (: иногда лучше читается.

Stav Bodik 21.02.2019 13:54

Это единственный способ заставить его работать - атрибут только для чтения работал, но испортил порядок табуляции.

Robin Schaaf 02.03.2021 23:57

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

Итак, у меня возникла идея реализовать это в решении jQuery:

    jQuery(document).ready(function () {
        $("input").attr('readonly', true);
        $("input").removeAttr('readonly');
   });

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

Уловка: использование таймера для сброса формы и установки пустых полей пароля. Продолжительность 100 мс кажется минимальной для работы.

$(document).ready(function() {
    setTimeout(function() {
        var $form = $('#formId');
        $form[0].reset();
        $form.find('INPUT[type=password]').val('');
    }, 100);
});

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

Andrew 08.11.2018 19:27

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

Я использую следующий фрагмент jQuery:

// Prevent input autocomplete
$.fn.preventAutocomplete = function() {
    this.each(function () {
        var $el = $(this);
        $el
            .clone(false, false) // Make a copy (except events)
            .insertBefore($el)   // Place it before original field
            .prop('id', '')      // Prevent ID duplicates
            .hide()              // Make it invisible for user
        ;
    });
};

И чем просто $('#login-form input').preventAutocomplete();

@mickmackusa спасибо за комментарий, я только что добавил больше объяснений

Oleg 28.08.2020 12:18

Обходной путь - не вставлять поле пароля в DOM до того, как пользователь захочет изменить пароль. Это может быть применимо в определенных случаях:

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

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

Решение заключалось в том, чтобы установить флажок, чтобы указать, вставлено ли поле пароля в DOM, а не только его видимость.

Псевдо-реализация для AngularJS:

<input type = "checkbox" ng-model = "createPassword">
<input ng-if = "changePassword" type = "password">

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

Что касается Internet Explorer 11, есть функция безопасности, которую можно использовать для блокировки автозаполнения. Это работает так:

Любое входное значение формы, измененное в JavaScript ПОСЛЕ того, как пользователь уже ввел его, помечается как непригодное для автозаполнения.

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

Однако вы можете вставить один специальный символ в начало строки пароля, чтобы заблокировать автозаполнение. Этот специальный символ может быть обнаружен и удален позже по конвейеру.

Это ужасное решение, и я бы никому не рекомендовал это делать.

Jamie Rees 08.12.2016 15:12

Решение для 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".

This works well for me.

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

Это работает в Chrome и для других типов полей, а не только для type = "password".

Jake 15.12.2017 01:04

Я использовал его с паролями, электронной почтой и текстовыми типами, и он работал. Я использовал это просто так: autocomplete = "new"

Crak_mboutin 16.01.2018 00:02

autocomplete = "nope" name = "pswd" и использовал <input name="dummyPassword" type="password" style="display:none;"> перед полем ввода реального пароля. Это сработало для меня.

Denuka 31.01.2019 21:51

Примеры: chromium.org/developers/design-documents/…

IvanRF 02.07.2019 23:28

Теперь это работает почти во всех браузерах, не только в Chrome: autocomplete # Browser_compatibility.

Andrew Morton 07.04.2020 13:38

Это лучший ответ на данный момент. См. Конец этой страницы для получения дополнительной информации: developer.mozilla.org/en-US/docs/Web/Security/…

splashout 19.05.2020 23:15

autocomplete = "new-password" а почему не работает параметр "off" ?? HTML-атрибуты это действительно лажа. Это работает в браузере Opera! Спасибо.

Williaan Lopes 03.07.2020 02:29

Работал у меня, ..

Jatin Mandanka 08.01.2021 13:38

У меня это работает.

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

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

Кажется, что этого невозможно достичь без использования комбинации клиентского и серверного кода.

Чтобы быть уверенным, что пользователь должен каждый раз заполнять форму без автозаполнения, я использую следующие приемы:

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

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

Вот рабочий пример, демонстрирующая javascript, css и html, как описано в # 2 https://jsfiddle.net/xnbxbpv4/

javascript:

$(document).ready(function() {
    $(".disable-input").attr("disabled", "disabled");
});

css:

.disable-input {
  display: none;
}

html:

<form>
<input type = "email" name = "username" placeholder = "username" class = "disable-input">
<input type = "email" name = "username" placeholder = "username">
<input type = "email" name = "username" placeholder = "username" class = "disable-input">
<br>
<input type = "password" name = "password" placeholder = "password" class = "disable-input">
<input type = "password" name = "password" placeholder = "password">
<input type = "password" name = "password" placeholder = "password" class = "disable-input">
<br>
<input type = "submit" value = "submit">
</form>

Вот примерный пример того, что код сервера, использующий asp.net с бритвой, должен облегчить # 1

модель:

public class FormModel
{
    public string Username { get; set; }
    public string Password { get; set; }
}

контроллер:

public class FormController : Controller
{
    public ActionResult Form()
    {
        var m = new FormModel();

        m.Username = "F" + Guid.NewGuid().ToString();
        m.Password = "F" + Guid.NewGuid().ToString();

        return View(m);
    }

    public ActionResult Form(FormModel m)
    {
        var u = Request.Form[m.Username];
        var p = Request.Form[m.Password];

        // todo: do something with the form values

        ...

        return View(m);
    }
}

Посмотреть:

@model FormModel

@using (Html.BeginForm("Form", "Form"))
{
    @Html.HiddenFor(m => m.UserName)
    @Html.HiddenFor(m => m.Password)

    <input type = "email" name = "@Model.Username" placeholder = "username" class = "disable-input">
    <input type = "email" name = "@Model.Username" placeholder = "username">
    <input type = "email" name = "@Model.Username" placeholder = "username" class = "disable-input">
    <br>
    <input type = "password" name = "@Model.Password" placeholder = "password" class = "disable-input">
    <input type = "password" name = "@Model.Password" placeholder = "password">
    <input type = "password" name = "@Model.Password" placeholder = "password" class = "disable-input">
    <br>
    <input type = "submit" value = "submit">
}

autocomplete = 'off' не сработал для меня, в любом случае я установил атрибут value поля ввода на пробел, то есть <input type='text' name='username' value = " ">, который установил символ ввода по умолчанию на пробел, и поскольку имя пользователя было пустым, пароль также был очищен.

Я использую этот TextMode = "password" autocomplete = "new-password" и при загрузке страницы в aspx txtPassword.Attributes.Add("value", '');

Попробуй это :

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

In addition to

autocomplete = "off"

Use

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');" >

Надеюсь это поможет.

Для меня в IE11 я не могу вводить текст в текстовое поле даже после того, как onfocus удаляет атрибут readonly. Однако, если я щелкну второй раз в текстовом поле, я могу печатать.

mcallahan 10.11.2017 22:16

Я столкнулся с той же проблемой с IE11 (не могу печатать до второго фокуса). Добавление размытия и затем фокус снова работает. $(document).on('focus', 'input:password[readonly = "readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });

palmsey 22.02.2018 17:59

@ Андрей. Конечно, можешь. Это основной принцип решения этой проблемы, и я также добавил обновление, содержащее полный пример кода;)

Murat Yıldız 08.11.2018 21:20

Я также добавил onfocusout = "this.setAttribute('readonly', 'readonly');"

rinatdobr 21.06.2019 21:21

Ни один из представленных ответов не работал во всех протестированных мной браузерах. Основываясь на уже предоставленных ответах, это то, к чему я пришел (протестировал) на Хром 61, Microsoft Edge 40 (EdgeHTML 15), IE 11, Firefox 57, Опера 49 и Safari 5.1. Это странно в результате многих испытаний; однако это работает для меня.

<form autocomplete = "off">
    ...
    <input type = "password" readonly autocomplete = "off" id = "Password" name = "Password" onblur = "this.setAttribute('readonly');" onfocus = "this.removeAttribute('readonly');" onfocusin = "this.removeAttribute('readonly');" onfocusout = "this.setAttribute('readonly');" />
    ...
</form> 

<script type = "text/javascript">
    $(function () {           
        $('input#Password').val('');
        $('input#Password').on('focus', function () {
        if (!$(this).val() || $(this).val().length < 2) {
            $(this).attr('type', 'text');
        }
        else {
            $(this).attr('type', 'password');
        }
    });
    $('input#Password').on('keyup', function () {
        if (!$(this).val() || $(this).val().length < 2) {
            $(this).attr('type', 'text');
        }
        else {
            $(this).attr('type', 'password');
        }
    });
    $('input#Password').on('keydown', function () {
        if (!$(this).val() || $(this).val().length < 2) {
            $(this).attr('type', 'text');
        }
        else {
            $(this).attr('type', 'password');
        }
    });
</script>

Многие современные браузеры больше не поддерживают autocomplete = "off" для полей входа. Вместо этого работает autocomplete = "new-password", дополнительная информация Документы MDN

Фиксированный. Просто нужно добавить над реальным полем ввода

https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion - MDN https://medium.com/paul-jaworski/turning-off-autocomplete-in-chrome-ee3ff8ef0908 - средний протестировано на EDGE, Chrome (последняя v63), Firefox Quantum (57.0.4 64-бит), Firefox (52.2.0) поддельные поля - это обходной путь для автозаполнения Chrome / Opera с неправильными полями

 const fakeInputStyle = {opacity: 0, float: 'left', border: 'none', height: '0', width: '0'}

 <input type = "password" name='fake-password' autoComplete='new-password' tabIndex='-1' style = {fakeInputSyle} />

<TextField
  name='userName'
  autoComplete='nope'
  ... 
/>

<TextField
      name='password'
      autoComplete='new-password'
      ... 
    />

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

Например:

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

если приведенный выше код не работает, попробуйте также добавить эти атрибуты

autocapitalize = "off" autocomplete = "off"

или же

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

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

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

<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.

Я обнаружил, что это работает при предварительном тестировании. Так странно, что "выкл" не работает.

Craig Jacobs 26.03.2018 17:36

Это не работает для Chrome на Android. Я пробовал установить строковые значения для атрибута autocomplete, и он по-прежнему отображает предыдущие записи в качестве предложений автозаполнения под вводом.

tebs1200 10.08.2018 07:55

@ tebs1200 Какой? Поле пароля или текстовое поле?

Cava 12.08.2018 05:55

@Cava извините за задержку с ответом. Текстовое поле. Неважно, какое значение я установил для autocomplete, я все равно получаю раскрывающийся список предложений на основе ранее введенных значений. Это нормально на рабочем столе, но не на Android Chrome.

tebs1200 18.08.2018 05:57

Мое решение - изменить тип текстовых входов динамически с помощью директивы angular js и это работает как шарм

сначала добавьте 2 скрытых текстовых поля

и просто добавьте такую ​​директиву angular

 (function () {

    'use strict';

    appname.directive('changePasswordType', directive);

    directive.$inject = ['$timeout', '$rootScope',  '$cookies'];

    function directive($timeout,  $rootScope, $cookies) {
        var directive = {
            link: link,
            restrict: 'A'
        };

        return directive;

        function link(scope,element) {
            var process = function () {
                var elem =element[0];
                elem.value.length > 0 ? element[0].setAttribute("type", "password") :
                element[0].setAttribute("type", "text");
            }

            element.bind('input', function () {
                process();
            });

            element.bind('keyup', function () {
                process();
            });
        }
    }
})()

затем используйте его в текстовом поле, где вам нужно предотвратить автозаполнение

    <input type = "text" style = "display:none">\can avoid this 2 lines
    <input type = "password" style = "display:none">
    <input type = "text"  autocomplete = "new-password" change-password-type>

NB: не забудьте включить jquery и изначально установить type = "text"

Никаких фальшивых вводов, никакого javascript!

Невозможно последовательно отключить автозаполнение во всех браузерах. Я перепробовал все разные предложения, и ни одно из них не работает во всех браузерах. Единственный способ - вообще не использовать ввод пароля. Вот что я придумал:

<style type = "text/css">
    @font-face {
        font-family: 'PasswordDots';
        src: url('text-security-disc.woff') format('woff');
        font-weight: normal;
        font-style: normal;
    }

    input.password {
        font-family: 'PasswordDots' !important;
        font-size: 8px !important;
    }
</style>

<input class = "password" type = "text" spellcheck = "false" />

Скачать: текст-безопасность-disc.woff

Вот как выглядит мой окончательный результат:

Password Mask

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

Мне удалось остановить автозаполнение Chrome 66, добавив два фальшивых ввода и указав им абсолютную позицию:

<form style = "position: relative">
  <div style = "position: absolute; top: -999px; left: -999px;">
    <input name = "username" type = "text" />
    <input name = "password" type = "password" />
  </div>
  <input name = "username" type = "text" />
  <input name = "password" type = "password" />

Сначала я попытался добавить display:none; к входам, но Chrome проигнорировал их и автоматически заполнил видимые.

Чтобы решить эту проблему, я использовал некоторые приемы CSS, и у меня сработало следующее.

input {
    text-security:disc;
    -webkit-text-security:disc;
    -mox-text-security:disc;
}

Пожалуйста, прочтите статью это для более подробной информации.

Google Chrome игнорирует атрибут autocomplete = "off" для определенных входных данных, включая входные данные пароля и общие входные данные, определяемые по имени.

Например, если у вас есть вход с именем address, то Chrome будет предлагать автозаполнение с адресов, введенных на других сайтах, даже если ты скажешь не:

<input type = "string" name = "address" autocomplete = "off">

Если вы не хотите, чтобы Chrome делал это, вы можете переименовать или создать пространство имен для имени поля формы:

<input type = "string" name = "mysite_addr" autocomplete = "off">

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

<input type = "string" name = "mysite_addr" autocomplete = "on">

Чтобы предотвратить автоматическое заполнение браузера сохраненными учетными данными пользователя для входа на сайт, поместите поле ввода текста и пароля вверху формы с непустыми значениями и стилем "position: absolute; top: -999px; left: -999px", чтобы скрыть поля.

<form>
  <input type = "text" name = "username_X" value = "-" tabindex = "-1" aria-hidden = "true" style = "position: absolute; top: -999px; left:-999px" />
  <input type = "password" name = "password_X" value = "-" tabindex = "-1" aria-hidden = "true" style = "position: absolute; top: -999px; left:-999px" />
  <!-- Place the form elements below here. -->
</form>

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

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

Важно, чтобы эти два поля располагались перед полями "настоящего" типа пароля в форме.

Для новых браузеров, совместимых с html 5.3, должно работать значение атрибута автозаполнения «новый пароль».

<form>
  <input type = "text" name = "username" value = "" />
  <input type = "password" name = "password" value = "" autocomplete = "new-password" />
</form>

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

<form>
  <div style = "display:none">
    <input type = "text" readonly tabindex = "-1" />
    <input type = "password" readonly tabindex = "-1" />
  </div>
  <!-- Place the form elements below here. -->
  <input type = "text" name = "username" value = "" />
  <input type = "password" name = "password" value = "" autocomplete = "new-password" />
</form>

Я решил бесконечную борьбу с Google Chrome с использованием случайных символов. Когда вы всегда визуализируете автозаполнение со случайной строкой, он никогда ничего не запомнит.

<input name = "name" type = "text" autocomplete = "rutjfkde">

Надеюсь, что это поможет другим людям.

Это работает даже лучше. Вы можете добавить небольшой JS, который генерирует случайный код для каждой загрузки страницы, и добавить этот код в поле ввода: <code> function autoId(){ var autoId = ""; var dict = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456‌​789"; for(var i=0; i You can add the autocompleteoff class to your desired input field.</code>

Raghuram Kasyap 31.08.2018 16:44

не работает в моей версии chrome 68.0.3440.106 (официальная сборка) (64-разрядная версия)

Sukanya Purushothaman 06.09.2018 08:31

В Chrome теперь используется стандартизированное отключение.

MacK 17.10.2018 14:16

К сожалению, это работает лучше, чем то, что называется стандартным на хроме.

Nour Lababidi 04.11.2018 06:01

Вы должны генерировать новую случайную строку на каждой странице перезагрузки.

step 21.06.2019 16:01

Сегодня я обнаружил, что Chrome перезаписывает случайную строку с помощью «Off». Не могу поверить, что разработчики Chrome делают этот атрибут плохим и неконтролируемым. Почему ох, мой получил.

step 07.10.2019 23:11

Если вы хотите предотвратить автоматическое заполнение поля общим подключаемым модулем браузера LastPass, вы можете добавить атрибут data-lpignore = "true" к другим предложениям в этой ветке. Обратите внимание, что это относится не только к полям пароля.

<input type = "text" autocomplete = "false" data-lpignore = "true" />

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

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

  1. Отключите атрибут автозаполнения формы
  2. Добавьте фиктивное поле ввода и отключите его атрибут.
<form autocomplete = "off">
 <input type = "text" autocomplete = "off" style = "display:none">
</form>

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

<input id='input_password' type='text' autocomplete='off' autofocus>

Есть переменная с именем "input", заданная как пустая строка ...

var input = "";

За полевыми событиями следит JQuery ...

  1. В фокусе всегда очищается содержимое поля и соответствующая «входная» переменная.
  2. При нажатии клавиши любой буквенно-цифровой символ, а также некоторые определенные символы добавляются к переменной «input», а поле input заменяется символом маркера. Кроме того, при нажатии клавиши Enter набранные символы (хранящиеся в переменной input) отправляются на сервер через Ajax. (См. «Сведения о сервере» ниже.)
  3. При нажатии клавиши Home, End и Arrow сбрасываются "входные" значения переменных и полей. (Я мог бы поработать со стрелками и событием фокуса и использовать .selectionStart, чтобы выяснить, где пользователь щелкнул или выполнял навигацию, но это не стоит усилий для поля пароля.) Кроме того, нажатие клавиши Backspace обрезает и то, и другое. переменная и содержимое поля соответственно.

$("#input_password").off().on("focus", function(event) {
    $(this).val("");
    input = "";

}).on("keypress", function(event) {
    event.preventDefault();

    if (event.key !== "Enter" && event.key.match(/^[0-9a-z!@#$%&*-_]/)) {
        $(this).val( $(this).val() + "•" );
        input += event.key;
    }
    else if (event.key == "Enter") {
        var params = {};
        params.password = input;

        $.post(SERVER_URL, params, function(data, status, ajax) {
            location.reload();
        });
    }

}).on("keyup", function(event) {
    var navigationKeys = ["Home", "End", "ArrowLeft", "ArrowRight", "ArrowUp", "ArrowDown"];
    if ($.inArray(event.key, navigationKeys) > -1) {
        event.preventDefault();
        $(this).val("");
        input = "";
    }
    else if (event.key == "Backspace") {
        var length = $(this).val().length - 1 > 0 ? $(this).val().length : 0;
        input = input.substring(0, length);
    }
});

Обзор Front-End

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


Сведения о сервере (необязательное чтение)

Как показано выше, Javascript выполняет location.reload (), как только сервер возвращает ответ JSON. (Этот метод входа в систему предназначен для доступа к ограниченному инструменту администрирования. Некоторые излишки, связанные с содержимым файлов cookie, могут быть пропущены для более общей реализации.) Вот подробности:

  • Когда пользователь переходит на сайт, сервер ищет допустимый файл cookie.
  • Если файл cookie отсутствует, отображается страница входа в систему. Когда пользователь вводит пароль, и он отправляется через Ajax, сервер подтверждает пароль, а также проверяет чтобы узнать, находится ли IP-адрес пользователя в списке авторизованных IP-адресов.
  • Если пароль или IP-адрес не распознаются, сервер не генерирует cookie, поэтому при перезагрузке страницы пользователь видит ту же страницу входа в систему.
  • Если распознаются и пароль, и IP, сервер генерирует cookie, который имеет десятиминутный срок жизни, а также хранит два скремблированных значения, которые соответствуют временным рамкам и IP.
  • Когда страница перезагружается, сервер находит cookie и проверяет, что зашифрованные значения верны (т. е. что временной интервал соответствует дате файла cookie и что IP-адрес совпадает).
  • Процесс аутентификации и обновления файла cookie повторяется каждый раз, когда пользователь взаимодействует с сервером, независимо от того, входит ли он в систему, отображает данные или обновляет запись.
  • Если значения cookie всегда верны, сервер представляет полный веб-сайт (если пользователь входит в систему) или выполняет любой запрос на отображение или обновление, который был отправлен.
  • Если в любой момент значения cookie неверны, сервер удаляет текущий файл cookie, который затем при перезагрузке приводит к тому, что страница входа в систему становится повторно отображается.

Вы можете добавить имя в атрибут name, как адрес email для вас формируется и генерирует значение электронной почты, например:

<form id = "something-form">
  <input style = "display: none" name = "email" value = "randomgeneratevalue"></input>
  <input type = "password">
</form>

Если вы используете этот метод, Google Chrome не сможет вставить пароль для автозаполнения.

Большинство ответов не помогли, поскольку браузер их просто игнорировал. (Некоторые из них не были кроссбраузерными). Исправление, которое сработало для меня:

<form autocomplete = "off">
    <input type = "text" autocomplete = "new-password" />
    <input type = "password" autocomplete = "new-password" />
</form>

Я установил autofill = "off" в теге формы и autofill = "new-password" везде, где автозаполнение не было необходимо.

Easy Hack

Сделать ввод доступным только для чтения

<input type = "text" name = "name" readonly = "readonly">

Удалить только чтение после тайм-аута

$(function() {
        setTimeout(function() {
            $('input[name = "name"]').prop('readonly', false);
        }, 50);
    });

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

Я решил поместить этот код после загрузки страницы:

<script>
var randomicAtomic = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
  $('input[type=text]').attr('autocomplete',randomicAtomic);
</script>

В этом ответе отсутствует образовательное объяснение.

mickmackusa 28.08.2020 08:21

Я столкнулся с той же проблемой, сегодня, 10.09.2019, я нашел только одно решение:

Добавьте autocomplete = "off" в тег формы.

поставить 1 ложный ввод после открытия тега формы.

<input id = "username" style = "display:none" type = "text" name = "fakeusernameremembered">

но он не будет работать с полем типа пароля, попробуйте

<input type = "text" oninput = "turnOnPasswordStyle()" placeholder = "Enter Password" name = "password" id = "password" required>

по сценарию

function turnOnPasswordStyle() {
    $('#password').attr('type', "password");
}

Это проверено на Chrome-78, IE-44, Firefox-69.

Самый простой ответ

<input autocomplete = "on|off">

Но имейте в виду поддержку браузера. В настоящее время атрибут автозаполнения поддерживается

Chrome 17.0 и новее IE 5.0 и последняя версия
Firefox 4.0 и более поздние версии
Safari 5.2 и последняя версия
Opera 9.6 и новее

Чтобы избежать автозаполнения, добавьте autocomplete = "off" к свойству ввода html.

Пример:

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

Мое решение с jQuery. Это может быть не на 100% надежным, но у меня это работает. Идея описана в аннотациях к коду.

    /**
 * Prevent fields autofill for fields.
 * When focusing on a text field with autocomplete (with values: "off", "none", "false") we replace the value with a new and unique one (here it is - "off-forced-[TIMESTAMP]"),
 * the browser does not find this type of autocomplete in the saved values and does not offer options.
 * Then, to prevent the entered text from being saved in the browser for a our new unique autocomplete, we replace it with the one set earlier when the field loses focus or when user press Enter key.
 * @type {{init: *}}
 */
var PreventFieldsAutofill = (function () {
    function init () {
        events.onPageStart();
    }

    var events = {
        onPageStart: function () {
            $(document).on('focus', 'input[autocomplete = "off"], input[autocomplete = "none"], input[autocomplete = "false"]', function () {
                methods.replaceAttrs($(this));
            });
            $(document).on('blur', 'input[data-prev-autocomplete]', function () {
                methods.returnAttrs($(this));
            });
            $(document).on('keydown', 'input[data-prev-autocomplete]', function (event) {
                if (event.keyCode == 13 || event.which == 13) {
                    methods.returnAttrs($(this));
                }
            });
            $(document).on('submit', 'form', function () {
                $(this).find('input[data-prev-autocomplete]').each(function () {
                    methods.returnAttrs($(this));
                });
            });
        }
    };

    var methods = {
        /**
         * Replace value of autocomplete and name attribute for unique and save the original value to new data attributes
         * @param $input
         */
        replaceAttrs: function ($input) {
            var randomString = 'off-forced-' + Date.now();
            $input.attr('data-prev-autocomplete', $input.attr('autocomplete'));
            $input.attr('autocomplete', randomString);
            if ($input.attr('name')) {
                $input.attr('data-prev-name', $input.attr('name'));
                $input.attr('name', randomString);
            }
        },
        /**
         * Restore original autocomplete and name value for prevent saving text in browser for unique value
         * @param $input
         */
        returnAttrs: function ($input) {
            $input.attr('autocomplete', $input.attr('data-prev-autocomplete'));
            $input.removeAttr('data-prev-autocomplete');
            if ($input.attr('data-prev-name')) {
                $input.attr('name', $input.attr('data-prev-name'));
                $input.removeAttr('data-prev-name');
            }
        }
    };

    return {
        init: init
    }
})();
PreventFieldsAutofill.init();
.input {
  display: block;
  width: 90%;
  padding: 6px 12px;
  font-size: 14px;
  line-height: 1.42857143;
  color: #555555;
  background-color: #fff;
  background-image: none;
  border: 1px solid #ccc;
  border-radius: 4px;
}
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js"></script>
<form action = "#">
  <p>
    <label for = "input-1">Firts name without autocomplete</label><br />
    <input id = "input-1" class = "input" type = "text" name = "first-name" autocomplete = "off" placeholder = "Firts name without autocomplete" />
  </p>
  <p>
    <label for = "input-2">Firts name with autocomplete</label><br />
    <input id = "input-2" class = "input" type = "text" name = "first-name" autocomplete = "given-name" placeholder = "Firts name with autocomplete" />
  </p>
  <p>
    <button type = "submit">Submit form</button>
  </p>
</form>

Я перепробовал почти все ответы, но новая версия Chrome умна; если вы напишете

autocomplete = "randomstring" or autocomplete = "rutjfkde"

он автоматически преобразует его в

autocomplete = "off"

когда элемент управления вводом получает фокус.

Итак, я сделал это с помощью jQuery, мое решение следующее.

$("input[type=text], input[type=number], input[type=email], input[type=password]").focus(function (e) {
    $(this).attr("autocomplete", "new-password");
})

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

По состоянию на декабрь 2019 г .:

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

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

Согласно сообщению Mozilla Dev Network (MDN) о как отключить автозаполнение формы

By default, browsers remember information that the user submits through fields on websites. This enables the browser to offer autocompletion (that is, suggest possible completions for fields that the user has started typing in) or autofill (that is, pre-populate certain fields upon load)

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

Решение

Итак, в конце статьи они поделились решением, которое работает для всех браузеров, включая IE11 + Edge. По сути, это плагин jQuery, который делает свое дело. Вот плагин связь to jQuery и как он работает.

Фрагмент кода:

$(document).ready(function () {        
    $('#frmLogin').disableAutoFill({
        passwordField: '.password'
    });
});

Обратите внимание на то, что в HTML поле пароля имеет текстовый тип, и для идентификации этого поля применяется класс password:

<input id = "Password" name = "Password" type = "text" class = "form-control password">

Надеюсь, это кому-то поможет.

Просто попробуйте поставить атрибут autocomplete со значением "off" к типу ввода.

<input type = "password" autocomplete = "off" name = "password" id = "password" />

Функция автозаполнения изменяет значение без выбора поля. Мы могли бы использовать это в нашем управлении состоянием, чтобы игнорировать изменения состояния перед событием select.

Пример в React:

import React, {Component} from 'react';

class NoAutoFillInput extends Component{

    constructor() {
        super();
        this.state = {
            locked: true
        }
    }

    onChange(event){
        if (!this.state.locked){
            this.props.onChange(event.target.value);
        }
    }

    render() {
        let props = {...this.props, ...{onChange: this.onChange.bind(this)}, ...{onSelect: () => this.setState({locked: false})}};
        return <input {...props}/>;
    }
}

export default NoAutoFillInput;

Если браузер пытается заполнить поле, элемент по-прежнему заблокирован, и его состояние не изменяется. Теперь вы можете просто заменить поле ввода компонентом NoAutoFillInput, чтобы предотвратить автозаполнение:

<div className = "form-group row">
    <div className = "col-sm-2">
        <NoAutoFillInput type = "text" name = "myUserName" className = "form-control" placeholder = "Username" value = {this.state.userName} onChange = {value => this.setState({userName: value})}/>
    </div>
    <div className = "col-sm-2">
        <NoAutoFillInput type = "password" name = "myPassword" className = "form-control" placeholder = "Password" value = {this.state.password} onChange = {value => this.setState({password: value})}/>
    </div>
</div>

Конечно, эту идею можно использовать и с другими фреймворками JS.

Ни одно из решений, которые я нашел на сегодняшний день, не дает реального рабочего отклика.

Решения с атрибутом autocomplete не работают.

Итак, вот что я написал для себя:

<input type = "text" name = "UserName" onkeyup = "if (this.value.length > 0) this.setAttribute('type', 'password'); else this.setAttribute('type', 'text');" >

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

И это работает.

ваше здоровье

Привет, @Patrick, ты отвечаешь на вопрос, которому больше 11 лет. Пожалуйста, попробуйте ответить на новые вопросы, это более полезно.

Archer 08.04.2020 19:39

@Archer, ваш комментарий на 100% ошибочен. Возраст вопроса не влияет на то, должен ли он получить новый ответ. Фактически, слишком много людей сосредоточены на ответах на новые вопросы, и в конечном итоге они публикуют избыточные советы по вопросам, которые были решены годами ранее и должны были быть закрыты как дубликаты. ВАЖНО, чтобы каждый новый ответ на странице содержал уникальные и ценные идеи. Ответ, который дает только совет, который уже был заявлен в более раннем ответе, вероятно, будет записан в DV, а затем удален как избыточный контент.

mickmackusa 28.08.2020 08:16

Просто autocomplete = "off" list = "autocompleteOff" в вашем вводе и работа сделана для IE / Edge! а для хрома добавить autocomplete = "new password"

Есть много ответов, но большинство из них - это хаки или какие-то обходные пути.

Здесь есть три случая.

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

Если вы все же хотите это сделать, см. Дело III

Случай II: Если это не ваша обычная форма входа в систему, а атрибут входных данных name или id не похож на электронную почту, логин, имя пользователя, имя пользователя, пароль.

Использовать

<input type = "text" name = "yoda" autocomplete = "off">

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

Например: логин, abc_login, пароль, some_password, password_field.

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

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

В таких случаях autocomplete = "off" работать не будет. Используйте autocomplete = "new-password"

<input type = "text" name = "yoda" autocomplete = "new-password">

Полезная ссылка:

  1. https://developer.mozilla.org/en-US/docs/Web/Security/Securing_your_site/Turning_off_form_autocompletion

Я много лет боролся с автозаполнением. Я пробовал каждое предложение, и ничего не помогло. Добавление атрибутов jQuery 2 сработало хорошо:

$(document).ready( function () {
    setTimeout(function() {
        $('input').attr('autocomplete', 'off').attr('autocorrect', 'off');
    }, 10);
}); 

приведет к HTML

<input id = "start_date" name = "start_date" type = "text" value = "" class = "input-small hasDatepicker" autocomplete = "off" placeholder = "Start date" autocorrect = "off">

Работает с Chrome 84.0.4147.105

1. Назначьте текстовый тип полям пароля и добавьте класс, например "fakepasswordtype"

<input type = "text" class = "fakepasswordtype" name = "password1">
<input type = "text" class = "fakepasswordtype" name = "password2">

2. Затем используйте jQuery, чтобы снова изменить тип на пароль в тот момент, когда будет сделан первый ввод.

jQuery(document).ready(function($) {
    $('.fakepasswordtype').on('input', function(e){
        $(this).prop('type', 'password');
    });
});

Это остановило Chrome от неприятного уродливого поведения при автозаполнении.

<input type = "text" name = "attendees" id = "autocomplete-custom-append">

<script>
  /* AUTOCOMPLETE */

  function init_autocomplete() {

    if (typeof ($.fn.autocomplete) === 'undefined') {
      return;
    }
    // console.info('init_autocomplete');

    var attendees = {
      1: "Shedrack Godson",
      2: "Hellen Thobias Mgeni",
      3: "Gerald Sanga",
      4: "Tabitha Godson",
      5: "Neema Oscar Mracha"
    };

    var countriesArray = $.map(countries, function (value, key) {
      return {
        value: value,
        data: key
      };
    });

    // initialize autocomplete with custom appendTo
    $('#autocomplete-custom-append').autocomplete({
      lookup: countriesArray
    });

  };
</script>

В Chrome для ввода типа пароля у меня работает только autocomplete = "new-password".

Уверен, что это наиболее универсальное решение на сегодняшний день.

Это останавливает автозаполнение и всплывающее окно с предложениями.

вступление

Посмотрим правде в глаза, autocomplete = off или new-password, похоже, не работает. Это должно работать, но это не так, и каждую неделю мы обнаруживаем, что что-то еще изменилось, и браузер заполняет форму новым случайным мусором, который нам не нужен. Я обнаружил действительно простое решение, которое не требует автозаполнения на страницах входа.

Как реализовать

Шаг 1). Добавьте один и тот же вызов функции в атрибуты onmousedown и onkeyup для полей имени пользователя и пароля, убедившись, что вы указали им идентификатор И обратите внимание на код в конце вызова функции. md = mousedown и ku = keyup

Для поля имени пользователя добавьте только значение &nbsp;, так как это предотвращает автоматическое заполнение формы при входе на страницу.

Например:

<input type = "text" value = "&nbsp;" id = "myusername" onmousedown = "protectMe(this,'md')" onkeyup = "protectMe(this,'ku')" />

Шаг 2). Включите эту функцию на странице

function protectMe(el,action){

 // Remove the white space we injected on startup
 var v = el.value.trim();
 
// Ignore this reset process if we are typing content in
// and only acknowledge a keypress when it's the last Delete
// we do resulting in the form value being empty
 if (action=='ku' && v != ''){return;} 

// Fix double quote issue (in the form input) that results from writing the outerHTML back to itself
  v = v.replace(/"/g,'\"'); 
  
  // Reset the popup appearing when the form came into focus from a click  by rewriting it back
  el.outerHTML=el.outerHTML; 

  // Issue instruction to refocus it again, insert the value that existed before we reset it and then select the content.
  setTimeout("var d=document.getElementById('"+el.id+"'); d.value=\""+v+"\";d.focus();if (d.value.length>1){d.select();}",100);
}

Что оно делает?

  • Сначала он добавляет в поле пробел &nbsp;, поэтому браузер пытается чтобы найти подробности, связанные с этим, но ничего не нашел, так что автозаполнение исправлено
  • Во-вторых, когда вы щелкаете, HTML создается снова, закрывая всплывающее окно, а затем значение добавляется обратно выбранным.
  • Наконец, когда вы удаляете строку с помощью кнопки «Удалить», всплывающее окно обычно появляется снова, но проверка клавиатуры повторяет процесс, если мы попадаем в эту точку.

Какие проблемы?

  • Нажатие, чтобы выбрать символ, является проблемой, но для страницы входа большинство простит тот факт, что на ней выделен весь текст.
  • Javascript обрезает любые входные пробелы, но вы, возможно, захотите сделать это тоже на стороне сервера, чтобы быть в безопасности.

Может быть лучше?

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

Протестированные браузеры

Протестировано и работает с последними версиями Chrome, Firefox, Edge на момент публикации.

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

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

Затем вы захотите сохранить любые длинные записи в одной строке, например input, и вы хотите, чтобы textarea прокручивал по оси Y с помощью курсора. Мы также хотим избавиться от поля изменения размера, поскольку мы делаем все возможное, чтобы имитировать поведение input, у которого нет дескриптора изменения размера. Мы достигаем всего этого с помощью небольшого быстрого CSS:

#your-textarea {
  resize: none;
  overflow-y: hidden;
  white-space: nowrap;
}

Наконец, вы захотите убедиться, что надоедливая полоса прокрутки не появляется, чтобы разрушить вечеринку (для этих особенно длинных записей), поэтому убедитесь, что ваша текстовая область не показывает ее:

#your-textarea::-webkit-scrollbar {
  display: none;
}

Очень просто. У нас не было проблем с автозаполнением с этим решением.

  1. Оставьте поля ввода с текстовым типом и скрытыми.
  2. В DOMContentLoaded вызовите функцию, которая изменяет типы пароля и отображает поля с задержкой в ​​1 с.

document.addEventListener('DOMContentLoaded', changeInputsType);

function changeInputsType() {
    setTimeout(function() {
        $(/*selector*/).prop("type", "password").show();
    }, 1000);
}

Вы должны сделать лучше, чем то, что вы только что опубликовали, чтобы предотвратить отрицательное голосование или пометку «некачественный» ответ. Имейте в виду, что вы соревнуетесь с 82 другими ответами. Добавить управление версиями. Конец обзора.

ZF007 24.11.2020 16:13

Попробовав все решения (некоторые сработали частично, отключив автозаполнение, но не автозаполнение, некоторые не работали вообще), я нашел лучшее решение на 2020 год, добавив type = "search" и autocomplete = "off" к вашему вводу. элемент. так:

<input type = "search" /> or <input type = "search" autocomplete = "off" />

Также убедитесь, что в элементе формы стоит autocomplete = "off". это работает отлично и отключает как автозаполнение, так и автозаполнение.

Кроме того, если вы используете type = "email" или любой другой тип текста, вам нужно добавить autocomplete = "new-email", и это полностью отключит оба. то же самое касается type = "password". просто добавьте префикс "новый-" к автозаполнению вместе с типом. как это:

<input type = "email" autocomplete = "new-email" />
<input type = "password" autocomplete = "new-password" />

Я уже опубликовал решение для этого здесь: https://stackoverflow.com/a/60664102/5117084

Обходной путь - установить для атрибута автозаполнения значение «cc-csc», значение которого является CVC кредитной карты и что им не разрешено его хранить! (сейчас...)

autocomplete = "cc-csc"

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