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

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

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

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

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

Ответы [ 33 ]

0 голосов
/ 18 марта 2016

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

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

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

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

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

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

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

echo $_POST['password'][1];
0 голосов
/ 27 июля 2015

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

<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

0 голосов
/ 08 августа 2014

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

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

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

0 голосов
/ 21 июня 2012

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

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

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

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

0 голосов
/ 15 апреля 2011

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

0 голосов
/ 26 июня 2014

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

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

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

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

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

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

0 голосов
/ 06 марта 2014

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

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

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

0 голосов
/ 25 апреля 2012

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

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

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

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

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

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

0 голосов
/ 01 июня 2012

Если вы не хотите доверять флагу автозаполнения, вы можете убедиться, что пользователь вводит текст в поле, используя событие onchange. Код ниже представляет собой простую форму HTML. Скрытый элемент формы password_edited начинается с 0. Когда значение пароля изменяется, JavaScript в верхней части (функция pw_edited) меняет значение на 1. При нажатии кнопки он проверяет код valueenter здесь перед отправкой формы , Таким образом, даже если браузер игнорирует вас и автоматически заполняет поле, пользователь не может пройти страницу входа в систему, не введя в поле пароля. Кроме того, не забудьте очистить поле пароля, когда фокус установлен. В противном случае вы можете добавить символ в конце, затем вернуться и удалить его, чтобы обмануть систему. Я рекомендую дополнительно добавить 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>
...