Отключить функцию сохранения пароля в браузере

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

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

Вопрос: Есть ли у сайта способ запретить браузеру запоминать пароли? Я давно занимаюсь веб-разработкой, но не знаю, сталкивался ли я с этим раньше.

Любая помощь приветствуется.

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

ThiefMaster 20.12.2011 16:38

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

Ian Boyd 22.06.2012 23:02

Это не всегда «проблема». Я пришел сюда, потому что firefox предлагает сохранить пароль для формы, которая содержит пароль WiFi / SSID, а не форму имени пользователя / пароля для входа. Это очень раздражает, и я хочу прекратить это.

srd 09.04.2014 20:50

Если информация настолько важна, ее следует защищать не только паролем.

Sam Watkins 08.12.2015 10:03

Один из способов, которым это, кажется, работает, - это не использовать

<form>. If you are using javascript to send the data (XHR), then you don't need it. I wanted to disable in a system that uses "one-time-password" authentication (no reason to store it). For user/pass authentications I wouldn't recommend to disable that feature.</form>
lepe 08.03.2016 06:35

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

Free Consulting 22.03.2016 22:24

Вы должны Обнадеживающий использовать менеджеры паролей, правильно установив autocomplete = tag. Это способ повысить безопасность.

Stuart 22.01.2021 20:20

@Stuart Я полагаю, что пользователю будет удобнее использовать диспетчер паролей, если ему будет предложено нет, хотят ли они сохранить одноразовый код доступа. К сожалению, большинство браузеров больше не позволяют autocomplete = off отключать диспетчер паролей. Одно из объяснений состоит в том, что autocomplete = off никогда не должен иметь ничего общего с менеджерами паролей, что является допустимым моментом, но тогда должно быть что-то специально для этой цели.

Imperishable Night 11.02.2021 22:28

@ImperishableNight следует использовать autocomplete = "одноразовый код", как показано здесь. twilio.com/blog/…

Stuart 14.02.2021 21:24

@Stuart Вау, я не знал, что тег autocomplete = принимает столько разных значений, кроме «on» и «off». Я предполагаю, что это неправильный ответ на этот конкретный вопрос, но для некоторых «дубликатов» этого вопроса, безусловно, может быть полезна ссылка на developer.mozilla.org/en-US/docs/Web/HTML/Attributes/….

Imperishable Night 16.02.2021 08:51
SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
SQL Injection: Атаки в реальной жизни и как это вредит бизнесу
Один-единственный вредоносный запрос может нанести ущерб вашему бизнесу. Уязвимости вашего кода могут привести к:
429
10
274 896
35
Перейти к ответу Данный вопрос помечен как решенный

Ответы 35

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

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

Вы должны помнить, что это сайт правительство, и подобные вещи носят политический характер. Если кто-то наверху говорит: «Это не должно так работать», тогда то, что реально, не входит в уравнение. Проблема может быть перенесена в заметки Post-It, но политика в отношении них предназначена для другого отдела - проблема была перенесена ;-) И я на самом деле серьезно.

Jason 19.07.2012 14:39
Ответ принят как подходящий

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

<form id = "loginForm" action = "login.cgi" method = "post" autocomplete = "off">

The easiest and simplest way to disable Form and Password storage prompts and prevent form data from being cached in session history is to use the autocomplete form element attribute with value "off".

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

Некоторые незначительные исследования показывают, что это работает в IE, но я не оставлю никаких гарантий;)

@ Джозеф: Если это строгое требование пройти проверку XHTML с фактической разметкой (хотя не знаю, почему это могло бы быть), вы могли бы теоретически добавить этот атрибут с javascript позже, но тогда пользователи с отключенным js (вероятно, незначительное количество вашей пользовательской базы или ноль, если вашему сайту требуется js), пароли все равно будут сохранены.

Пример с jQuery:

$('#loginForm').attr('autocomplete', 'off');

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

Tyler Egeto 10.01.2011 04:32

firefox (3.6.15), похоже, вообще не касается autocomplete = "off". Я попытался добавить это как в форму, так и в поле пароля, но он по-прежнему заполняет pwd, когда я нажимаю вкладку в поле имени пользователя. Я также пытался изменить атрибут name поля pwd на что-то другое, но похоже, что он использует атрибут type = "password" (хотя я читал, что он соответствует атрибуту 'name'). Это тоже не работает. Что еще я могу попробовать?

hese 10.03.2011 00:56

Вы можете использовать расширение Chrome Autocomplete = On, чтобы победить это :) chrome.google.com/webstore/detail/autocomplete-on

Neil McGuigan 10.08.2013 04:16

К вашему сведению, Microsoft решила, что Internet Explorer 11 больше не поддерживает autocomplete = "off" для полей input type = "password". msdn.microsoft.com/en-us/library/ie/ms533486%28v=vs.85%29.as‌ px

JW Lim 06.03.2014 08:12

но я ДЕЙСТВИТЕЛЬНО хочу, чтобы в моей форме было автозаполнение, и НЕ хочу, чтобы браузер сохранял всплывающее окно «сохранить пароль».

vsync 26.03.2014 18:49

Так же, как @JWLim упомянул, что IE 11 прекращает поддержку отключения функции сохранения пароля, точно так же и Firefox. bugzilla.mozilla.org/show_bug.cgi?id=956906

Gregory Cosmo Haun 07.05.2014 04:42

@GregoryCosmoHaun Спасибо за информацию. На самом деле кажется, что браузеры отнимают у нас, разработчиков, все больше и больше возможностей: / Насколько я знаю, мы все еще можем помешать им сохранять пароли, если вы разделите поля «Имя пользователя» и «Пароль». Я упоминал об этом в моем ответ ниже.

JW Lim 07.05.2014 04:46

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

st_stefanov 30.10.2014 12:34

Firefox (к сожалению) последовал примеру Microsoft и также «убрал» поддержку автозаполнения. Подробнее см. Комментарий 100 в следующем обсуждении проблемы: bugzilla.mozilla.org/show_bug.cgi?id=956906

Bouncing Bit 18.12.2014 11:51

Теперь не работает для Firefox 38+ mozilla.org/en-US/firefox/38.0/releasenotes

Illuminator 31.05.2015 13:37

Это игнорируется большинством современных браузеров ... caniuse.com/#feat=input-autocomplete-onoff

Alejandro García Iglesias 03.06.2016 22:02

Итак, каков был бы правильный ответ на этот вопрос? Несмотря на 321 голос за, этот ответ не работает.

Azaz ul Haq 10.12.2019 14:50

Может ли кто-нибудь опубликовать обновленный ответ на Отключение функции браузера «Сохранить пароль» в современном браузере?

Hemant Metalia 08.04.2020 08:18

Is there a way for a site to tell the browser not to offer to remember passwords?

Веб-сайт сообщает браузеру, что это пароль, используя <input type = "password">. Итак, если вы должен делаете это с точки зрения веб-сайта, вам придется это изменить. (Очевидно, я этого не рекомендую).

Лучшим решением было бы настроить браузер таким образом, чтобы он не запоминал пароли.

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

Karl 30.11.2008 23:35

@karl: потому что необходимость ввода пароля на открытом воздухе позволяет «серфить по плечу», то есть процесс подбора пароля, глядя на экран во время его набора.

David Schmitt 22.01.2010 13:14

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

Karl 22.01.2010 14:48

@karl: Если на вашем компьютере установлено шпионское ПО / вирус, то никакая защита звездочкой вас не спасет. Установленному приложению не сложнее перехватить то, что вводится в поле «пароль», чем сделать то же самое для поля с открытым текстом.

Markus Olsson 22.01.2010 14:59

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

zwol 15.03.2011 03:16

«Итак, если вы должны сделать это с точки зрения веб-сайта, вам придется это изменить» - но как ???

user5260143 02.02.2016 13:11

Один из известных мне способов - использовать (например) JavaScript для копирования значения из поля пароля перед отправкой формы.

Основная проблема в том, что решение привязано к JavaScript.

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

Хеширование на стороне клиента не заменяет хеширование на стороне сервера. Я не уверен, поможет ли это вообще (если будет сделано дополнительно).

Brilliand 24.05.2012 12:05

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

rjmunro 11.09.2012 14:18

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

Alexis Wilke 16.12.2012 12:54

Маркус поднял важный вопрос. Я решил поискать атрибут autocomplete и получил следующее:

The only downside to using this attribute is that it is not standard (it works in IE and Mozilla browsers), and would cause XHTML validation to fail. I think this is a case where it's reasonable to break validation however. (source)

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

У меня проблема с проверкой в ​​соответствии со стандартами w3c. Дело в том, что мне нужна эта функция для веб-сайта мобильного банкинга. Я предполагаю, что мобильные браузеры достаточно строги и иногда могут испортить форму, если используется какой-то недопустимый атрибут. Что посоветуете в этом случае?

asgs 08.03.2010 09:56

Я думаю, что это старый стиль мышления. Многие современные мобильные браузеры построены на основе WebKit и либо поддерживают, либо игнорируют этот атрибут. Я не знаю, как другие страны или браузеры в старых сотовых телефонах справляются с этим, но изящная обработка атрибутов / элементов, которые неизвестны, имеет фундаментальное значение для хорошего браузера. Это «доказательство будущего», чтобы браузер не ломался по мере развития сети. Он может отставать (не реализовывать новые функции), но не сломается. Надеюсь, что это поможет =)

Joseph Pecoraro 11.04.2010 03:58

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

viam0Zah 16.12.2010 16:05

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

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

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

[@Joel] (# 32409), который может помешать автоматическому заполнению формы, но помешает ли это браузеру затем запросить сохранение пароля для этой новой формы предполагаемый?

Joseph Pecoraro 28.08.2008 18:32

Я не верю, что сейчас это сработает. В FF 13 у меня есть форма с несколькими полями пароля, все с разными именами. FF, как только он сохраняет пароль для этой страницы, вставляет сохраненный пароль во ВСЕ поля пароля. Его не волнует, каковы имена полей (например, у меня есть «new_password» и «old_password», и сохраненный пароль сбрасывается в оба из них). В этой конкретной форме у меня нет имени пользователя для сохранения пароля - только два поля пароля, на случай, если это имеет значение.

Jason 19.07.2012 14:31

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

F. P. Freely 20.06.2014 19:05

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

Кстати, это аутентификация, а не аутентификация

Jonathan. 27.12.2011 02:43

@Jonathan Pity, я предпочитаю аутентификация

Ian Boyd 22.06.2012 23:04

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

Ajay Takur 30.07.2019 12:21

Я делал комбинацию autocomplete = "off" и очищал поля пароля с помощью javascript / jQuery.

Пример jQuery:

$(function() { 
    $('#PasswordEdit').attr("autocomplete", "off");
    setTimeout('$("#PasswordEdit").val("");', 50); 
});

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

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

С этим требованием стандартный метод autocomplete = "off" не работает во всех браузерах, поскольку пароль мог быть сохранен при первом входе в систему. Коллега нашел решение заменить поле пароля, когда оно было сфокусировано новым полем пароля, а затем сосредоточиться на поле нового пароля (затем подключить тот же обработчик событий). Это сработало (за исключением того, что это вызвало бесконечный цикл в IE6). Может быть, есть способ обойти это, но это вызывало у меня мигрень.

Наконец, я попытался оставить имя пользователя и пароль вне формы. К моему удивлению, это сработало! Он работал с IE6 и текущими версиями Firefox и Chrome в Linux. Я не тестировал его дальше, но подозреваю, что он работает в большинстве, если не во всех браузерах (но меня не удивило бы, если бы существовал браузер, которому было бы все равно, если бы не было формы).

Вот пример кода и jQuery, чтобы заставить его работать:

<input type = "text" id = "username" name = "username"/>
<input type = "password" id = "password" name = "password"/>

<form id = "theForm" action = "/your/login" method = "post">
  <input type = "hidden" id = "hiddenUsername" name = "username"/>
  <input type = "hidden" id = "hiddenPassword" name = "password"/>
  <input type = "submit" value = "Login"/>
</form>

<script type = "text/javascript" language = "JavaScript">
  $("#theForm").submit(function() {
    $("#hiddenUsername").val($("#username").val());
    $("#hiddenPassword").val($("#password").val());
  });
  $("#username,#password").keypress(function(e) {
    if (e.which == 13) {
      $("#theForm").submit();
    }
  });
</script>

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

Alexis Wilke 16.12.2012 12:47

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

AgelessEssence 27.03.2014 09:02

Не уверен, что это из-за того, что я застрял в использовании jquery 1.6, но указанный выше jquery работал только после того, как заключил внутрь $ (document) .ready (function () {});

rgbflawed 14.11.2014 21:23

Единственное правильное решение - это, поскольку некоторые браузеры больше не принимают autocomplete = "off"!

Abadis 19.01.2015 20:17

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

manoj 20.01.2016 07:24

Нарушение функции безопасности с помощью кода любительского уровня на самом деле является ужасным решением.

Free Consulting 22.03.2016 22:16

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

Tim 16.12.2016 16:27

Я только что попробовал этот метод в Chrome, Opera и Internet Explorer, и, похоже, он работает, но он не работает с Firefox, к сожалению,

chenks 27.02.2019 15:14

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

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

"но опытные пользователи могут обойти это" - that is applicable to most application features, web or not, and shouldn't be a reason to limit the system. People can also write their passwords on post-its and put it on their monitor, you can only do so much for security from the application perspective, and providing meaningful default behaviour (not saving it locally) is a start.
Niels Keurentjes 08.01.2014 03:15

autocomplete = "off" работает для большинства современных браузеров, но другой метод, который я использовал, который успешно работал с Epiphany (браузер на базе WebKit для GNOME), - это сохранение случайно сгенерированного префикса в состоянии сеанса (или скрытого поля, которое у меня было подходящая переменная уже в состоянии сеанса) и используйте это, чтобы изменить имя полей. Epiphany все еще хочет сохранить пароль, но при возврате к форме он не заполняет поля.

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

CodesInChaos 22.06.2015 14:11

У меня не было проблем с использованием этого метода:

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

Если вы не хотите доверять флагу автозаполнения, вы можете убедиться, что пользователь вводит в поле, используя событие onchange. Приведенный ниже код представляет собой простую HTML-форму. Для скрытого элемента формы password_edited установлено значение 0. Когда значение пароля изменяется, JavaScript вверху (функция pw_edited) изменяет значение на 1. При нажатии кнопки он проверяет здесь код ввода значения перед отправкой формы. . Таким образом, даже если браузер игнорирует вас и автоматически заполняет поле, пользователь не может перейти на страницу входа, не введя в поле пароля. Кроме того, убедитесь, что поле пароля пусто, когда установлен фокус. В противном случае вы можете добавить символ в конце, а затем вернуться и удалить его, чтобы обмануть систему. Я рекомендую дополнительно добавить autocomplete = "off" к паролю, но этот пример показывает, как работает резервный код.

<html>
  <head>
    <script>
      function pw_edited() {
        document.this_form.password_edited.value = 1;
      }
      function pw_blank() {
        document.this_form.password.value = "";
      }
      function submitf() {
        if (document.this_form.password_edited.value < 1) {
          alert("Please Enter Your Password!");
        }
        else {
         document.this_form.submit();
        }
      }
    </script>
  </head>
  <body>
    <form name = "this_form" method = "post" action = "../../cgi-bin/yourscript.cgi?login">
      <div style = "padding-left:25px;">
        <p>
          <label>User:</label>
          <input name = "user_name" type = "text" class = "input" value = "" size = "30" maxlength = "60">
        </p>
        <p>
          <label>Password:</label>
          <input name = "password" type = "password" class = "input" size = "20" value = "" maxlength = "50" onfocus = "pw_blank();" onchange = "pw_edited();">
        </p>
        <p>
          <span id = "error_msg"></span>
        </p>
        <p>
          <input type = "hidden" name = "password_edited" value = "0">
          <input name = "submitform" type = "button" class = "button" value = "Login" onclick = "return submitf();">
        </p>
      </div>
    </form>
  </body>
</html>

ИМХО,
Лучший способ - рандомизировать имя поля ввода с type=password. Используйте префикс «pwd», а затем случайное число. Создавайте поле динамически и представляйте форму пользователю.

Ваша форма входа будет выглядеть так ...

<form>
   <input type=password id=pwd67584 ...>
   <input type=text id=username ...>
   <input type=submit>
</form>

Затем на стороне сервера, когда вы анализируете форму, отправленную клиентом, ловите поле с именем, которое начинается с «pwd», и используйте его в качестве «пароля».

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

Alexis Wilke 16.12.2012 12:51

Chrome делает агрессивные попытки запоминания и автоматического заполнения полей имени пользователя и пароля, даже если они были переименованы. Радость :)

Már Örlygsson 05.09.2014 14:41

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

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

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

<input type = "text" id = "username" name = "username"/>
<input type = "password" id = "prevent_autofill" autocomplete = "off" style = "display:none" tabindex = "-1" />
<input type = "password" id = "password" autocomplete = "off" name = "password"/>

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

Примечание: это фактически остановит автозаполнение пароля, потому что FF «сохранит» значение #prevent_autofill (которое пусто) и попытается заполнить все сохраненные пароли там, поскольку он всегда использует первый вход type = "password", который он находит в DOM, после соответствующего " имя пользователя "input.

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

CodesInChaos 31.07.2015 15:28

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

venimus 31.07.2015 15:46

@CodesInChaos ИМХО, вам следует пересмотреть свой голос против, потому что ваше беспокойство недействительно

venimus 23.09.2015 13:08

я думаю, что установка autocomplete = "off" совсем не помогает

у меня есть альтернативное решение,

<input type = "text" name = "preventAutoPass" id = "preventAutoPass" style = "display:none" />

добавьте это перед вводом пароля.

например: <input type = "text" name = "txtUserName" id = "txtUserName" /> <input type = "text" name = "preventAutoPass" id = "preventAutoPass" style = "display:none" /> <input type = "password" name = "txtPass" id = "txtPass" autocomplete = "off" />

это не мешает браузеру запрашивать и сохранять пароль. но это не позволяет ввести пароль.

радость

Поскольку Internet Explorer 11 больше не поддерживает autocomplete = "off" для полей input type = "password" (будем надеяться, что никакие другие браузеры не последуют их примеру), самый чистый подход (на момент написания), похоже, заставляет пользователей отправлять свое имя пользователя и пароль на разных страницах, т. Е. Пользователь вводит свое имя пользователя, отправьте, затем введите свой пароль и отправьте. Веб-сайты Банк Америки и HSBC Банк тоже используют это.

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

Обновление: как упоминалось в этом комментарий от Грегори, Firefox будет следовать примеру IE11 и игнорировать autocomplete = "off" для полей пароля.

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

heymega 19.09.2014 13:58

Самый простой способ решить эту проблему - добавить поле поддельного пароля в самом начале формы без имени. как и <input type = "password" style = "display:none;"/>, браузер заполняет только первое поле. наша форма будет работать как положено.

Vignesh 14.01.2015 07:33

Я протестировал это добавление autocomplete = "off" в тег формы во всех основных браузерах. Фактически, большинство людей в США до сих пор используют IE8.

  1. IE8, IE9, IE10, Firefox, Safari работают нормально.

    Browser not asking "save password". Also, previously saved username & password not populated.

  2. Chrome и IE 11 не поддерживают функцию autocomplete = "off"
  3. FF поддерживает autocomplete = "off". но иногда существующие спасены учетные данные заполнены.

Обновлено 11 июня 2014 г.

Наконец, ниже представлено кроссбраузерное решение с использованием javascript, которое отлично работает во всех браузерах.

Необходимо удалить тег "form" в форме входа. После проверки на стороне клиента поместите эти учетные данные в скрытую форму и отправьте их.

Также добавьте два метода. один для проверки "validateLogin ()", а другой для прослушивания события ввода при нажатии кнопки ввода в текстовом поле / пароле / кнопке "checkAndSubmit ()". потому что теперь форма входа в систему не имеет тега формы, поэтому событие ввода здесь не работает.

HTML

<form id = "HiddenLoginForm" action = "" method = "post">
<input type = "hidden" name = "username" id = "hidden_username" />
<input type = "hidden" name = "password" id = "hidden_password" />
</form>

Username: <input type = "text" name = "username" id = "username" onKeyPress = "return checkAndSubmit(event);" /> 
Password: <input type = "text" name = "password" id = "password" onKeyPress = "return checkAndSubmit(event);" /> 
<input type = "button" value = "submit" onClick = "return validateAndLogin();" onKeyPress = "return checkAndSubmit(event);" /> 

Javascript

//For validation- you can modify as you like
function validateAndLogin(){
  var username = document.getElementById("username");
  var password = document.getElementById("password");

  if (username  && username.value == ''){
    alert("Please enter username!");
    return false;
  }

  if (password && password.value == ''){
    alert("Please enter password!");
    return false;
  }

  document.getElementById("hidden_username").value = username.value;
  document.getElementById("hidden_password").value = password.value;
  document.getElementById("HiddenLoginForm").submit();
}

//For enter event
function checkAndSubmit(e) {
 if (e.keyCode == 13) {
   validateAndLogin();
 }
}

Удачи!!!

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

JW Lim 11.06.2014 12:10

@JW Lim, я обновил ответ. Пожалуйста, изучите это. Спасибо!

Asik 11.06.2014 15:03

@Sivakumar, Хорошо, включите ОС и версию Safari. чтобы другие люди знали то же самое. он работал в моей системе (Windows 8, Safary 5)

Asik 04.02.2015 12:52

@Asik Safari 8.0.3 и Mac OS 10.10

Sivakumar 09.02.2015 07:15

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

Представьте, что у вас autocomplete = "off" отлично работает во всех браузерах. Поможет ли это с безопасностью? Конечно нет. Пользователи будут записывать свои пароли в учебники, на стикеры, прикрепленные к их монитору, где каждый посетитель офиса может их видеть, сохранять их в текстовые файлы на рабочем столе и так далее.

Как правило, веб-приложение и веб-разработчик никоим образом не несут ответственности за безопасность конечных пользователей. Конечные пользователи могут только защитить себя. В идеале они ДОЛЖНЫ держать все пароли в голове и использовать функцию сброса пароля (или связаться с администратором) на случай, если они его забыли. В противном случае всегда будет риск, что пароль каким-то образом увидят и украдут.

Таким образом, либо у вас есть какая-то сумасшедшая политика безопасности с аппаратными ключами (например, некоторые банки предлагают интернет-банкинг, который в основном использует двухфакторную аутентификацию), либо вообще ОТСУТСТВУЕТ БЕЗОПАСНОСТЬ. Ну, конечно, это немного преувеличено. Важно понимать, от чего вы пытаетесь защититься:

  1. Несанкционированный доступ. В принципе, достаточно простейшей формы входа. Иногда принимаются дополнительные меры, такие как случайные вопросы безопасности, CAPTCHA, усиление пароля и т. д.
  2. Обнюхивание учетных данных. HTTPS ОБЯЗАТЕЛЬНА, если люди получают доступ к вашему веб-приложению из общедоступных точек доступа Wi-Fi и т. д. Обратите внимание, что даже при наличии HTTPS вашим пользователям необходимо регулярно менять свои пароли.
  3. Атака изнутри. Существует два множества таких примеров, начиная с простого кражи ваших паролей из браузера или тех, которые вы записали где-то на столе (не требует каких-либо навыков в области ИТ), и заканчивая созданием сеанса и перехватом локального сетевого трафика (даже зашифрованного). и дальнейший доступ к веб-приложению, как если бы это был другой конечный пользователь.

В этом конкретном посте я вижу неадекватные требования, предъявляемые к разработчику, которые он никогда не сможет решить из-за характера проблемы - безопасности конечного пользователя. Я субъективно считаю, что разработчик должен сказать НЕТ и указать на проблему с требованиями, а не тратить время на такие задачи, честно. Это не совсем сделает вашу систему более защищенной, скорее приведет к случаям с наклейками на мониторах. К сожалению, некоторые начальники слышат только то, что хотят слышать. Однако на вашем месте я бы попытался объяснить, откуда взялась настоящая проблема, и что autocomplete = "off" не решит ее, если только не заставит пользователей хранить все свои пароли исключительно в голове! Разработчик, со своей стороны, не может полностью защитить пользователей, пользователи должны знать, как использовать систему, и в то же время не раскрывать свою конфиденциальную / безопасную информацию, и это выходит далеко за рамки аутентификации.

если autocomplete = "off" не работает ... удалите тег формы и используйте вместо него тег div, а затем передайте значения формы с помощью jquery на сервер. Это сработало для меня.

У меня есть обходной путь, который может помочь.

Вы можете сделать собственный шрифт. Итак, создайте собственный шрифт, например, со всеми символами в виде точки / круга / звезды. Используйте его как собственный шрифт для своего веб-сайта. Посмотрите, как это сделать в inkscape: как сделать свой собственный шрифт

Затем в форме входа используйте:

<form autocomplete='off'  ...>
   <input type = "text" name = "email" ...>
   <input type = "text" name = "password" class = "password" autocomplete='off' ...>
   <input type=submit>
</form>

Затем добавьте свой css:

@font-face {
    font-family: 'myCustomfont';
    src: url('myCustomfont.eot');
    src: url('myCustomfont?#iefix') format('embedded-opentype'),
         url('myCustomfont.woff') format('woff'),
         url('myCustomfont.ttf') format('truetype'),
         url('myCustomfont.svg#myCustomfont') format('svg');
    font-weight: normal;
    font-style: normal;

}
.password {
  font-family:'myCustomfont';
}

Довольно кроссбраузерная совместимость. Я пробовал IE6 +, FF, Safari и Chrome. Просто убедитесь, что конвертируемый шрифт oet не поврежден. Надеюсь, это поможет?

действительно изящное решение есть шрифт пароля здесь

andrew 24.11.2014 20:30

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

user246645 11.12.2014 17:53

Что ж, это очень старый пост, но все же я дам свое решение, которого моя команда пыталась достичь долгое время. Мы просто добавили новое поле input type = "password" внутрь формы, обернули его в div и сделали div скрытым. Убедитесь, что этот div находится до фактического ввода пароля. Это сработало для нас и не дало возможности сохранить пароль.

Планк - http://plnkr.co/edit/xmBR31NQMUgUhYHBiZSg?p=preview

HTML:

<form method = "post" action = "yoururl">
      <div class = "hidden">
        <input type = "password"/>
      </div>
      <input type = "text" name = "username" placeholder = "username"/>
      <input type = "password" name = "password" placeholder = "password"/>
    </form>

CSS:

.hidden {display:none;}

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

pvgoddijn 26.11.2014 18:39

@ whyAto8 Это не сработало для меня в Chrome 47.0.2526.111 ... трюк, чтобы заставить его работать, состоял в том, чтобы добавить еще один текст поля в скрытый div. Браузер просит сохранить пароль, НО он говорит: «Вы уверены, что сохраните эти данные?» а затем отображается пустое имя пользователя и пустой пароль. Это сработало.

David Bélanger 20.01.2016 18:59

Решение почемуAto8 вместе с комментарием @David Bélanger сработало для меня (ни одно из других решений не помогло). Я также должен упомянуть, что я добавил два пустых скрытых поля ПЕРЕД теми, которые фактически используются для ввода данных, а дублированные (скрытые) поля имели одинаковые имена. Таким образом, Chrome (48.0.2564.103) даже не спрашивал, нужно ли сохранять пароль.

Vadim 11.02.2016 19:18

Никакая комбинация этого не работает в Chrome 48.0.2564.116. Даже в сочетании с комментарием Дэвида Беланжера всплывающее окно Chrome с просьбой сохранить пароль по-прежнему кэширует пароль, если вы нажмете ОК

ChrisO 05.03.2016 01:28

Отличный ответ .. Скажите, пожалуйста, почему вы сказали «Убедился, что этот div находится до фактического ввода пароля»? Я поставил этот div после ввода фактического пароля, и он все еще работает ... Так почему вы упомянули об этом?

Martin AJ 06.07.2016 14:15

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

whyAto8 07.07.2016 07:38

Работает с Google Chrome 53, iOS10 Safari и IE11. Это было серьезной головной болью, которую нужно было выследить. Определенное голосование за !!

PoloHoleSet 05.10.2016 20:25

autocomplete = "off" не работает для отключения диспетчера паролей в Firefox 31 и, скорее всего, не в некоторых более ранних версиях.

Ознакомьтесь с обсуждением этой проблемы в mozilla: https://bugzilla.mozilla.org/show_bug.cgi?id=956906

Мы хотели использовать второе поле пароля для ввода одноразового пароля, сгенерированного токеном. Теперь мы используем ввод текста вместо ввода пароля. :-(

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

<input type = "text" style = "display:none">
<input type = "text" name = "OriginalLoginTextBox">

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

Это отлично работает для IE11 и Chrome 44.0.2403.107

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

Вот пример (вы не можете запустить его здесь, поскольку действие формы не настроено на настоящий скрипт входа в систему):

<!doctype html>
<html>
<head>
  <title>Login & Save password test</title>
  <meta charset = "utf-8">
  <script src = "//ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
</head>

  <body>
      <!-- the following fields will show on page, but are not part of the form -->
      <input class = "username" type = "text" placeholder = "Username" />
      <input class = "password" type = "password" placeholder = "Password" />

      <form id = "loginForm" action = "login.aspx" method = "post">
        <!-- thw following two fields are part of the form, but are not visible -->
        <input name = "username" id = "username" type = "hidden" />
        <input name = "password" id = "password" type = "hidden" />
        <!-- standard submit button -->
        <button type = "submit">Login</button>
      </form>

    <script>
      // attache a event listener which will get called just before the form data is sent to server
      $('form').submit(function(ev) {
        console.info('xxx');
        // read the value from the visible INPUT and save it to invisible one
        // ... so that it gets sent to the server
        $('#username').val($('.username').val());
        $('#password').val($('.password').val());
      });
    </script>

  </body>
</html>

Windows Firefox 57.0.2 (64-разрядная версия) по-прежнему предлагает сохранить пароль после того, как я это реализовал.

Panu Haaramo 19.12.2017 11:53

ну это просто хак, который может перестать работать в любой момент :)

knee-cola 20.12.2017 13:35

это лучший вариант! просто очистите поле пароля перед отправкой: $ ('. password'). val ('')

ebelendez 07.05.2020 19:36

Мой обходной путь js (jquery) - изменить тип ввода пароля на текст при отправке формы. Пароль может стать видимым на секунду, поэтому я также скрываю ввод непосредственно перед этим. Я бы предпочел не использовать это для форм входа, но это полезно (вместе с autocomplete = "off"), например, внутри административной части сайта.

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

$('form').submit(function(event) {
    $(this).find('input[type=password]').css('visibility', 'hidden').attr('type', 'text');
});

Проверено в Chrome 44.0.2403.157 (64-разрядная версия).

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

Ferry Kranenburg 10.12.2015 01:01

Работает на IE 11.0.9600.18161!

Lu55 08.02.2016 10:47

Это правда. Теперь я попробовал это в FF 44.0.2, и этот хак больше не работает ... как жаль. В Chrome это все еще работает.

ovalek 02.03.2016 22:33

Вы можете заменить input [type = submit] или button [type = submit] на обычную кнопку [type = button] и сделать это в обработчике onclick. Если в форме нет [type = submit], это также предотвратит отправку формы с помощью клавиши ввода и отображение запроса на сохранение пароля.

Steven Don 13.05.2016 17:17

Столкнувшись с той же проблемой HIPAA и нашел относительно простое решение,

  1. Создайте скрытое поле пароля с именем поля в виде массива.

    <input type = "password" name = "password[]" style = "display:none" />
    
  2. Используйте тот же массив для фактического поля пароля.

    <input type = "password" name = "password[]" />
    

Браузер (Chrome) может предложить вам «Сохранить пароль», но независимо от того, выберет ли пользователь «Сохранить», при следующем входе в систему пароль автоматически заполнит скрытое поле пароля, нулевой слот в массиве, а 1-й слот останется пустым.

Я попытался определить массив, например «пароль [часть2]», но он все равно запомнил. Я думаю, что это отбрасывает его, если это неиндексированный массив, потому что у него нет другого выбора, кроме как отбросить его в первую очередь.

Затем вы используете выбранный вами язык программирования для доступа к массиву, например PHP,

echo $_POST['password'][1];

Этим вы скрываете проблему безопасности - хэш пароля все еще хранится в кеше браузера.

Alexander Burakevych 25.05.2016 08:47

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

Mike 26.05.2016 18:16

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

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

@KishoreSahas Я только что протестировал Firefox 49.0.1 и убедился, что он работает так же, как и в предыдущих версиях Firefox.

Murat Yıldız 26.10.2016 21:31

@KishoreSahas Не могли бы вы опубликовать свой код, чтобы я мог проверить?

Murat Yıldız 26.10.2016 21:31

@Murat Yıldız: Мне нужно реализовать то же самое, и я следил за вашим кодом. У меня он отлично работает во всех браузерах. Спасибо !

Sree 29.12.2016 09:06

@Sree Я рада, что вам это помогло :)

Murat Yıldız 29.12.2016 09:07

Я только что протестировал это, и, к сожалению, это не сработало для Firefox (52.0). Это позволило мне сохранить пароль при первом входе в систему и снова войти в систему с сохраненной учетной записью во второй раз. После этого он предварительно заполнял его, когда я иногда переходил к полю пароля, но иногда нет (не уверен, что там). Я вижу пароль в области «Сохраненные логины ...», и вы можете указать пароль там. Похоже, это сработало для Chrome (56.0).

mikato 10.03.2017 20:28

Только что протестировал Mozilla Firefox 52.0, Google Chrome 57.0, Microsoft Edge 38.1 и работает как шарм! ..

Murat Yıldız 10.03.2017 21:33

@mikato Может быть, вы применили что-то не так, повторите попытку и дайте мне знать, работает ли это ...

Murat Yıldız 13.03.2017 09:12

@ MuratYıldız Как ни странно казалось, что мой собственный веб-браузер Firefox все еще может сохранять пароль, но другие люди, также использующие Firefox, сказали, что они больше не могут сохранять пароль. Но сейчас, спустя несколько дней, я тоже не могу сохранить свой пароль. Думаю, это сработало, и почему-то у моего браузера была запоздалая реакция. Это может заставить меня винить кеширование, но все же это кажется странным.

mikato 18.03.2017 00:51

@mikato Я рад, что ваша проблема наконец-то решена и вы заставили ее работать должным образом :)

Murat Yıldız 18.03.2017 09:14

В Safari Mobile может быть ошибка, поскольку этот ответ исправляет ее stackoverflow.com/questions/2530/…

Ferie 01.11.2017 15:50

@Ferie Я рад, что это помогает решить проблему;) Спасибо за отзыв.

Murat Yıldız 01.11.2017 16:27

Windows Firefox 57.0.2 (64-разрядная версия) по-прежнему предлагает сохранить пароль после того, как я это реализовал.

Panu Haaramo 19.12.2017 11:35

@PanuHaaramo Не имеет значения, если браузер не может запомнить учетные данные пользователя для следующих входов в систему ...

Murat Yıldız 19.12.2017 16:11

просто пробовал использовать этот метод, и он работает только в Chrome. не работает в Opera, Firefox или Internet Explorer

chenks 27.02.2019 14:44

@chenks Я только что снова протестировал для вас, используя следующие браузеры: Версия Chrome 72.0.3626.109 (официальная сборка) (64-разрядная версия), Firefox Quantum 65.0.1 (64-разрядная версия), Разработчик Firefox Эд. 66.0b7 (64-бит), Internet Explorer 11 и все еще работающий как шарм! ..

Murat Yıldız 27.02.2019 18:19

@ murat-yildiz ну я не знаю, что тебе сказать. Я тестировал его с текущими версиями перечисленных мной браузеров (в Windows 7), и он не работал в Opera, Firefox и IE11. единственный браузер, в котором он работал у меня, был Chrome. Может быть, вы могли бы предоставить полный html-код своей рабочей версии, чтобы я мог снова протестировать?

chenks 27.02.2019 22:14

<input type="password" name="Password" autocomplete="off" readonly onfocus="this.removeAttribute('readonly');" style="background:#fff; cursor: text;"> Решение отличное, не сомневайтесь. Но если мы его реализуем, пароль frield будет отключен, поэтому после этих изменений я думаю, что это решение не нуждается в дальнейших изменениях. Нам просто нужно добавить белый цвет фона и вид курсора.

Asad Naeem 21.10.2019 11:36

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

Murat Yıldız 21.10.2019 15:37

@ MuratYıldız Я использую Chrome. Так что это может быть версия браузера.

Asad Naeem 23.10.2019 07:33

в браузере firefox 84.0b8 (64-битная) версия не работает.

Ajay Takur 05.12.2020 09:53

Я пробовал выше autocomplete = "off", но ничего не получилось. если вы используете angular js, я рекомендую использовать кнопку и щелчок ng.

<button type = "button" class = "" ng-click = "vm.login()" />

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

Спасибо за вопрос и ответы.

это, очевидно, нарушает нажатие клавиши enter или return для отправки формы.

8eecf0d2 04.03.2018 02:16

Поскольку autocomplete = "off" не работает для полей пароля, необходимо полагаться на javascript. Вот простое решение, основанное на найденных здесь ответах.

Добавьте атрибут data-password-autocomplete = "off" в поле пароля:

<input type = "password" data-password-autocomplete = "off">

Включите следующий JS:

$(function(){
    $('[data-password-autocomplete = "off"]').each(function() {
        $(this).prop('type', 'text');
        $('<input type = "password"/>').hide().insertBefore(this);
        $(this).focus(function() {
            $(this).prop('type', 'password');
        });
    });     
});

Это решение работает как для Chrome, так и для FF.

Windows Firefox 57.0.2 (64-разрядная версия) по-прежнему предлагает сохранить пароль после того, как я это реализовал.

Panu Haaramo 19.12.2017 11:33

Я протестировал множество решений. Имя динамического поля пароля, несколько полей пароля (невидимые для поддельных), изменение типа ввода с "текст" на "пароль", autocomplete = "off", autocomplete = "new-password", ... но ничего не решило с недавним браузер.

Чтобы избавиться от запоминания пароля, я наконец обработал пароль как поле ввода и «размыл» набранный текст.

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

Вы сможете оценить риск использования предложенного ниже предложения или опции запоминания пароля из навигатора.

Хотя запоминание пароля может управляться (отключаться для каждого сайта) пользователем, это нормально для персонального компьютера, а не для «общедоступного» или совместно используемого компьютера.

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

<input style = "background-color: rgb(239, 179, 196); color: black; text-shadow: none;" name = "password" size = "10" maxlength = "30" onfocus = "this.value='';this.style.color='black'; this.style.textShadow='none';" onkeypress = "this.style.color='transparent'; this.style.textShadow='1px 1px 6px green';" autocomplete = "off" type = "text">

Поскольку большинство предложений autocomplete, включая принятый ответ, не работают в современных веб-браузерах (т. Е. Менеджеры паролей веб-браузеров игнорируют autocomplete), более новым решением является переключение между типами password и text и согласование цвета фона с текстом. цвет, когда поле является обычным текстовым полем, которое продолжает скрывать пароль, будучи полем реального пароля, когда пользователь (или такая программа, как KeePass) вводит пароль. Браузеры не просят сохранять пароли, которые хранятся в текстовых полях.

Преимущество этого подхода заключается в том, что он допускает прогрессивное улучшение и, следовательно, не требует Javascript для того, чтобы поле функционировало как обычное поле пароля (вместо этого вы также можете начать с обычного текстового поля и применить тот же подход, но это не совсем HIPAA Соответствует PHI / PII). Также этот подход не зависит от скрытых форм / полей, которые не обязательно могут быть отправлены на сервер (потому что они скрыты), и некоторые из этих уловок также не работают в некоторых современных браузерах.

Плагин jQuery:

https://github.com/cubiclesoft/php-flexforms-modules/blob/master/password-manager/jquery.stoppasswordmanager.js

Соответствующий исходный код из приведенной выше ссылки:

(function($) {
$.fn.StopPasswordManager = function() {
    return this.each(function() {
        var $this = $(this);

        $this.addClass('no-print');
        $this.attr('data-background-color', $this.css('background-color'));
        $this.css('background-color', $this.css('color'));
        $this.attr('type', 'text');
        $this.attr('autocomplete', 'off');

        $this.focus(function() {
            $this.attr('type', 'password');
            $this.css('background-color', $this.attr('data-background-color'));
        });

        $this.blur(function() {
            $this.css('background-color', $this.css('color'));
            $this.attr('type', 'text');
            $this[0].selectionStart = $this[0].selectionEnd;
        });

        $this.on('keydown', function(e) {
            if (e.keyCode == 13)
            {
                $this.css('background-color', $this.css('color'));
                $this.attr('type', 'text');
                $this[0].selectionStart = $this[0].selectionEnd;
            }
        });
    });
}
}(jQuery));

Демо:

https://barebonescms.com/demos/admin_pack/admin.php

Нажмите «Добавить запись» в меню, а затем прокрутите страницу вниз до «Модуль: остановить диспетчер паролей».

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

На сегодняшний день наиболее многообещающим ответом является @murat. Я сам тестировал его в Firefox, но, как предлагали другие в комментариях, он по-прежнему запрашивает пароль в первый раз. Тогда этого не произойдет, независимо от того, сколько раз вы повторно вводите пароль (в моем случае отправка с использованием Ajax). Если страница перезагружается, описанное выше поведение повторяется.

Я подумал, что у банковских сайтов должна быть такая функциональность, поэтому я проверил onlinesbi.com, и он отлично справляется.! Он не просит хранить пароль ни в одном браузере. Я попытался проверить источник, но не смог понять, он использует некоторую комбинацию скрытых элементов плюс автозаполнение и js. Я не мог понять этого, но на этой платформе их много, и я надеюсь, что кто-то определенно выяснит и разместит это здесь.

Это мой HTML-код для решения. Работает для Chrome-Safari-Internet Explorer.. Я создал новый шрифт, все символы которого выглядят как «●». Затем я использую этот шрифт для текста своего пароля. Примечание. Название моего шрифта - "пароль секретный".

<style type = "text/css">
         #login_parola {
             font-family: 'passwordsecretregular' !important;
            -webkit-text-security: disc !important;
            font-size: 22px !important;
         }
    </style>


<input type = "text" class = "w205 has-keyboard-alpha"  name = "login_parola" id = "login_parola" onkeyup = "checkCapsWarning(event)"  
   onfocus = "checkCapsWarning(event)" onblur = "removeCapsWarning()" onpaste = "return false;" maxlength = "32"/>

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