Отключить функцию браузера «Сохранить пароль» - PullRequest
410 голосов
/ 28 августа 2008

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

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

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

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

Ответы [ 33 ]

3 голосов
/ 04 июля 2014

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

3 голосов
/ 04 апреля 2017

Поскольку 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.

2 голосов
/ 25 июля 2014

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

Вы можете взломать пользовательский шрифт. Поэтому создайте собственный шрифт, например, со всеми символами в виде точки / круга / звезды. Используйте это как пользовательский шрифт для вашего сайта. Проверьте, как это сделать в 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 не поврежден. Надеюсь, это поможет?

2 голосов
/ 07 февраля 2011

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

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

1 голос
/ 04 августа 2015

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

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

<!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.log('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>
1 голос
/ 29 августа 2015

Мой обходной путь 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-разрядная версия).

1 голос
/ 28 августа 2008

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

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

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

1 голос
/ 11 апреля 2017

Я проверил много решений. Динамическое имя поля пароля, несколько полей пароля (невидимых для поддельных), изменение типа ввода с «текст» на «пароль», 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">
1 голос
/ 21 марта 2017

Я пробовал выше autocomplete="off" и все же ничего удачного. Если вы используете Angle JS, я рекомендую нажать кнопку и нажать нг.

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

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

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

0 голосов
/ 28 августа 2008

Есть ли у сайта способ запретить браузеру запоминать пароли?

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

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

...