Як відключити autocomplete
основні веб-переглядачі для певного input
(або form field
)?
Як відключити autocomplete
основні веб-переглядачі для певного input
(або form field
)?
Відповіді:
Firefox 30 ігнорує autocomplete="off"
паролі, вибираючи запит користувача на те, чи слід зберігати пароль на клієнті. Зверніть увагу на наступний коментар від 5 травня 2014 року:
- Менеджер паролів завжди запитує, чи хоче він зберегти пароль. Паролі не зберігаються без дозволу користувача.
- Ми третій браузер, який впровадив цю зміну після IE та Chrome.
Згідно з документацією Mozilla Developer Network , атрибут Boolean form element autocomplete
не дозволяє кешувати дані форми у старих браузерах.
<input type="text" name="foo" autocomplete="off" />
Крім того autocomplete=off
, ви також можете мати імена полів форми рандомізованих кодом, який генерує сторінку, можливо, додавши до кінця імен певний рядок, характерний для сеансу.
Після подання форми ви можете зняти її, перш ніж обробляти їх на стороні сервера. Це заважає веб-браузеру знаходити контекст для вашого поля, а також може запобігти атакам XSRF, оскільки зловмисник не зможе відгадати назви полів для подання форми.
$_SESSION['codefield_name'] = md5(uniqid('auth', true));
Більшість основних браузерів та менеджерів паролів (правильно, IMHO) зараз ігнорують autocomplete=off
.
Чому? Багато банків та інші веб-сайти "з високою безпекою" додають autocomplete=off
на свої сторінки входу "з метою безпеки", але це фактично знижує безпеку, оскільки змушує людей змінювати паролі на цих сайтах із високою безпекою, щоб їх легко запам’ятати (і, таким чином, зламати), оскільки автозаповнення було зламано.
Здавна більшість менеджерів паролів почали ігнорувати autocomplete=off
, і тепер браузери починають робити те саме для введення імені користувача / пароля.
На жаль, помилки в реалізаціях автозаповнення вставляють інформацію про ім’я користувача та / або пароль у невідповідні поля форми, викликаючи помилки перевірки форми, або ще гірше, випадково вставляючи імена користувачів у поля, які навмисно залишені користувачем.
Що робити веб-розробникам?
На жаль, Chrome 34 намагатиметься автоматично заповнювати поля користувачем / пропускати кожен раз, коли побачить поле пароля. Це досить погана помилка, що, сподіваємось, вони змінять поведінку Safari. Однак додавання цього у верхній частині форми, здається, відключає автоматичне заповнення пароля:
<input type="text" style="display:none">
<input type="password" style="display:none">
Я ще не досліджував IE або Firefox ретельно, але буду радий оновити відповідь, якщо інші мають інформацію в коментарях.
type='password'
полів на одній сторінці призвело до ігнорування автозаповнення браузера "збереження пароля", що спричинило ціле навантаження, оскільки реєстраційні форми, як правило, запитують пароль двічі, коли форми для входу запитують його лише один раз.
Іноді навіть автозаповнення = викл б не допустити , щоб заповнити облікові дані в неправильних полях, але не є користувачем або поле нік.
Це вирішення є доповненням до публікації apinstein про поведінку браузера.
виправити автозаповнення браузера в режимі лише для читання та встановити фокус, що можна записати (натискання та вкладка)
<input type="password" readonly
onfocus="this.removeAttribute('readonly');"/>
Оновлення: мобільний Safari встановлює курсор у полі, але не показує віртуальну клавіатуру. New Fix працює як раніше, але обробляє віртуальну клавіатуру:
<input id="email" readonly type="email" onfocus="if (this.hasAttribute('readonly')) {
this.removeAttribute('readonly');
// fix for mobile safari to show virtual keyboard
this.blur(); this.focus(); }" />
Демо-версія https://jsfiddle.net/danielsuess/n0scguv6/
// UpdateEnd
Тому що браузер автоматично заповнює облікові дані в неправильному текстовому полі !?
Я помічаю цю дивну поведінку на Chrome і Safari, коли поля паролів є в тому самому вигляді. Я думаю, браузер шукає поле для пароля, щоб вставити збережені облікові дані. Тоді воно автоматично заповнює (лише здогадуючись завдяки спостереженню) найближче текстове поле для введення тексту, яке з’являється перед полем пароля в DOM. Оскільки веб-переглядач - це останній екземпляр, і ви не можете ним керувати,
Це виправлення лише для читання вище працювало для мене.
readonly
вилучено, наступний вибір поля призводить до повернення автозаповнення.
<form name="form1" id="form1" method="post"
autocomplete="off" action="http://www.example.com/form.cgi">
Це буде працювати в Internet Explorer і Mozilla FireFox, недоліком є те, що це не стандарт XHTML.
input type="password"
. Сподіваємось, жоден інший браузер не вирішить видалити цю функціональність.
autocomplete="off"
на form
єдине, що працювало для Chrome.
Рішення для 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"
.
Це добре працює для мене.
Примітка: переконайтесь, F12
що ваші зміни набувають чинності, багато разів браузери зберігають сторінку в кеші, це створило на мене погане враження, що вона не працює, але браузер насправді не приніс зміни.
Як говорили інші, відповідь така autocomplete="off"
Однак я вважаю, що варто уточнити, чому корисно використовувати це в певних випадках, оскільки деякі відповіді на це та дублюючі запитання підказують, що краще не вимикати його.
Зупинення браузерів, що зберігають номери кредитних карток, не слід залишати користувачам. Занадто багато користувачів навіть не усвідомлюють, що це проблема.
Особливо важливо вимкнути його на полях для кодів безпеки кредитної картки. Як зазначено на цій сторінці :
"Ніколи не зберігайте код безпеки ... його значення залежить від презумпції, що єдиним способом його надання є зчитування його з фізичної кредитної картки, що підтверджує, що особа, яка її постачає, насправді тримає картку".
Проблема полягає в тому, що якщо це загальнодоступний комп'ютер (кібер-кафе, бібліотека тощо), то іншим користувачам легко вкрасти дані вашої картки, і навіть на вашій власній машині шкідливий веб-сайт може вкрасти дані про автозаповнення .
Я вирішив нескінченну боротьбу з Google Chrome із використанням випадкових символів. Коли ви завжди візуалізуєте автозаповнення випадковим рядком, він ніколи нічого не запам’ятає.
<input name="name" type="text" autocomplete="rutjfkde">
Сподіваємось, що це допоможе іншим людям.
autocompleteoff
клас до потрібного поля введення.
Мені потрібно просити відрізнятись від тих відповідей, які говорять, щоб уникнути відключення автоматичного завершення.
Перше, що потрібно зробити, - це те, що автоматичне завершення, яке не є явно відключеним у полях форми входу, - це помилка PCI-DSS. Крім того, якщо локальна машина користувачів порушена, зловмисник може отримати тривіальну інформацію про автоматичне заповнення даних, оскільки вони зберігаються у відкритому доступі.
Безумовно, є аргумент щодо зручності використання, проте існує дуже тонкий баланс, коли мова йде про те, у яких полях форм має бути вимкнено автозаповнення, а в якому - не.
Три варіанти: Перший:
<input type='text' autocomplete='off' />
Друге:
<form action='' autocomplete='off'>
Третє (javascript-код):
$('input').attr('autocomplete', 'off');
На спорідненій чи насправді, на абсолютно протилежній ноті -
"Якщо ви користувач вищезазначеної форми і хочете знову активувати функцію автозаповнення, використовуйте закладку" запам'ятати пароль "на цій сторінці закладок . Це видаляє всі
autocomplete="off"
атрибути з усіх форм на сторінці. Продовжуйте боротися з хорошою боротьбою! "
Ми фактично використовували sasb для одного сайту. Це був веб-додаток з медичним програмним забезпеченням для управління лікарем. Однак багато наших клієнтів були хірургами, які використовували безліч різних робочих станцій, включаючи напівдержавні термінали. Отже, вони хотіли переконатися, що лікар, який не розуміє наслідків автоматично збережених паролів або не звертає уваги, не зможе випадково залишити свою інформацію про вхід легко доступною. Звичайно, це було до того, як ідея приватного перегляду, яка починає з'являтися в IE8, FF3.1 тощо. Навіть так, багато лікарів змушені користуватися старими шкільними браузерами в лікарнях з ІТ, які не зміниться.
Отже, нам довелося генерувати випадкові імена полів, які працювали б лише для цієї публікації. Так, це менш зручно, але це просто ударить користувача над головою про те, щоб не зберігати інформацію про вхід на громадських терміналах.
Жодне з рішень не працювало для мене в цій розмові.
Нарешті я з’ясував чисте HTML-рішення, яке не потребує Javascript , працює в сучасних браузерах (крім IE; там потрібно було хоча б 1 лов, так?), І не вимагає відключення автозаповнення для всієї форми.
Просто вимкніть автозаповнення на, form
а потім увімкніть його для роботи, яку input
ви хочете працювати у формі. Наприклад:
<form autocomplete="off">
<!-- these inputs will not allow autocomplete and chrome
won't highlight them yellow! -->
<input name="username" />
<input name="password" type="password" />
<!-- this field will allow autocomplete to work even
though we've disabled it on the form -->
<input name="another_field" autocomplete="on" />
</form>
Просто встановити autocomplete="off"
. Для цього є дуже вагома причина: Ви хочете забезпечити власну функцію автозаповнення!
Я намагався нескінченних рішень, а потім знайшов таке:
Замість autocomplete="off"
просто використовуватиautocomplete="false"
Так просто, і це працює як шарм і в Google Chrome!
Це працює для мене.
<input name="pass" type="password" autocomplete="new-password" />
Ми також можемо використовувати цю стратегію в інших елементах управління, таких як текст, вибір тощо
Я думаю, autocomplete=off
це підтримується в HTML 5.
Запитайте себе, чому ви хочете зробити це, хоча - це може мати сенс у деяких ситуаціях, але не робіть цього лише заради цього.
Це менш зручно для користувачів і навіть не має проблеми з безпекою в OS X (згадана Сореном нижче). Якщо ви турбуєтесь про те, щоб люди вкрали віддалені паролі - реєстратор натискань на клавіші все одно може це зробити, навіть якщо ваша програма використовує autcomplete=off
.
Оскільки користувач, який вирішив, щоб браузер пам’ятав (більшість) моєї інформації, я вважаю, що це дратує, якщо ваш сайт не пам’ятав мою.
Окрім
autocomplete="off"
Використовуйте
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');" >
Сподіваюсь, це допомагає.
$(document).on('focus', 'input:password[readonly="readonly"]', function () { $(this).prop('readonly', false).blur().focus(); });
onfocusout="this.setAttribute('readonly', 'readonly');"
Найкраще рішення:
Запобігайте автозаповненню імені користувача (або електронної пошти) та пароля:
<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
autocomplete
атрибута, і він все ще відображає попередні записи як пропозиції автозаповнення під вводом.
autocomplete
, я все одно отримую пропозицію на основі раніше введених значень. Це добре на робочому столі, але не на Android Chrome.
Трохи пізно в грі ... але я просто зіткнувся з цією проблемою і випробував кілька відмов, але ця працює для мене, знайдена на MDN
У деяких випадках браузер продовжує запропонувати значення автозаповнення, навіть якщо атрибут автозаповнення встановлено на вимкнено. Така несподівана поведінка може бути досить спантеличною для розробників. Трюк, щоб дійсно змусити незавершення, - присвоїти атрибуту випадковий рядок так:
autocomplete="nope"
Додавання autocomplete="off"
не збирається скорочувати.
Змініть атрибут типу введення на type="search"
.
Google не застосовує автоматичне заповнення до даних із типом пошуку.
Використовуйте нестандартне ім’я та ідентифікатор для полів, тож замість "name" є "name_". Потім браузери не бачать це полем імені. Найкраще в тому, що ви можете зробити це для деяких, але не для всіх полів, і вони заповнять деякі, але не всі поля.
Щоб уникнути недійсного XHTML, ви можете встановити цей атрибут за допомогою javascript. Приклад за допомогою jQuery:
<input type="text" class="noAutoComplete" ... />
$(function() {
$('.noAutoComplete').attr('autocomplete', 'off');
});
Проблема полягає в тому, що користувачі без JavaScript отримають функцію автозаповнення.
Я не можу повірити, що це питання залишається настільки довгим після його повідомлення. Вищезазначені рішення для мене не спрацювали, оскільки сафарі, здавалося, знає, коли елемент не відображається чи не відображається на екрані, однак для мене спрацювало наступне:
<div style="height:0px; overflow:hidden; ">
Username <input type="text" name="fake_safari_username" >
Password <input type="password" name="fake_safari_password">
</div>
Сподіваюся, що комусь корисно!
Так ось це:
function turnOnPasswordStyle() {
$('#inputpassword').attr('type', "password");
}
<input oninput="turnOnPasswordStyle()" id="inputpassword" type="text">
Це проблема безпеки, яку браузери зараз ігнорують. Браузери ідентифікують та зберігають вміст, використовуючи вхідні імена, навіть якщо розробники вважають, що інформація є чутливою і не повинна зберігатися. Якщо ім'я вводу відрізняється від двох запитів, це вирішить проблему (але вона все одно буде збережена в кеші браузера, а також збільшить кеш браузера). Попросити користувача активувати або відключити параметри в налаштуваннях свого браузера - це не дуже вдале рішення. Проблема може бути виправлена в бекенде.
Ось моє виправлення. Підхід, який я реалізував у своїх рамках. Усі елементи автозаповнення генеруються приховано таким чином:
<? $r = rmd5(rand().mocrotime(TRUE)); ?>
<form method="POST" action="./">
<input type="text" name="<? echo $r; ?>" />
<input type="hidden" name="__autocomplete_fix_<? echo $r; ?>" value="username" />
<input type="submit" name="submit" value="submit" />
</form>
Потім сервер обробляє такі змінні публікації:
foreach ($_POST as $key => $val)
{
if(preg_match('#^__autocomplete_fix_#', $key) === 1){
$n = substr($key, 19);
if(isset($_POST[$n]))$_POST[$val] = $_POST[$n];
}
}
Доступ до цього значення можна отримати як завжди
var_dump($_POST['username']);
І браузер не зможе запропонувати інформацію з попереднього запиту чи від попередніх користувачів.
Все працює як шарм, навіть якщо оновлення веб-переглядачів хочуть ігнорувати автозаповнення чи ні. Це було найкращим способом вирішити проблему для мене.
Жоден із згаданих тут хаків не працював для мене в Chrome. Тут обговорюється це питання: https://code.google.com/p/chromium/isissue/detail?id=468153#c41
Додавання цього <form>
твору (принаймні поки що):
<div style="display: none;">
<input type="text" id="PreventChromeAutocomplete" name="PreventChromeAutocomplete" autocomplete="address-level4" />
</div>
maxlength="0"
не дозволяє Firefox автоматично заповнювати поле.