Отключайте autocomplete

    В 1999-м году в браузере IE 5 Микрософт впервые реализовал автозаполнение текстовых полей форм, что позволило вам не вводить текст, который вы уже вводили ранее в поле с данным именем (в том числе на другом сайте). Тогда же появилось нестандартное расширение тега <input>: атрибут autocomplete, установление которого в off позволяло отключить эту функциональность для конкретного поля. Сейчас все популярные браузеры (подсказали, что кроме Оперы) поддерживают автозаполнение и этот атрибут. Он также введён в стандарт HTML 5. Тем не менее, разработчики веб-сайтов зачастую им пренебрегают.

    Кредитные карты


    Наиболее важное место, где следует его использовать — это поле ввода номера кредитной карты. Следует помнить, что браузер запоминает все значения, вводимые в этом поле. К примеру, Firefox 3.5.x это делает в файле formhistory.sqlite в пользовательском профиле, где они лежат в открытом виде. Установка мастер-пароля в менеджере паролей Firefox не приводит к шифрованию этого файла, и я не нашёл расширений, которые бы это сделали (подскажите, если знаете такие). Я довольно часто пользуюсь веб-шопами и, введя в поиск в моём любимом просмотрщике файлов первые четыре цифры номера своей карточки (которые, кстати, одинаковые для всех карт моего банка), я нашёл пять экземпляров номера карточки под разными именами полей: cc_number, cregit_num, CARDNUM, ctl00$cphBody$txtCardNumber и cardnr. В пределах видимости в трёх случаях я нашёл cardholder name, в двух случаях expiration date (часто предлагают выбрать из выпадающего списка, поэтому она не всегда запоминается), в четырёх случаях CVV-код. Замечу, что CVV-код нужен не всем шопам, во многих удаётся успешно покупать, не вводя его.

    Это означает простую вещь: человеку с намётанным глазом потребуется около двух минут доступа к незаблокированному компу, чтобы утащить номер кредитки, по которой когда-то что-то покупали. Про раздолье для троянов даже нечего говорить. При этом я не вижу простого способа вычистить это разом, не трогая другие поля автозаполнения: нужно искать редактор базы sqllite, поставить аддон для управления формами (например Form History Control — спасибо Source) либо удалять из поля на всех соответствующих сайтах (а кто их помнит?). Я временно решил проблему, создав HTML-файл такого содержания:
    <input type="text" name="cc_number">
    <input type="text" name="cregit_num">
    <input type="text" name="CARDNUM">
    <input type="text" name="ctl00$cphBody$txtCardNumber">
    <input type="text" name="cardnr">

    Открыв его в браузере, я в каждом поле нажал «вниз» и «удалить». Сразу после этого номера карточки исчезли из formhistory.sqlite.

    Если ваш сайт запрашивает информацию о карточке, обязательно добавляйте autocomplete="off" в поле ввода номера, владельца карты и cvv-кода. Было бы здорово увидеть поддержку и со стороны браузеров. К примеру, расширение для Firefox, которое позволяет выборочно сохранять текст в соответствии с регулярным выражением. Для номера карточки всё просто: 16 цифр подряд — не сохраняем. Не припомню, чтобы я вводил ещё какие-то 16-значные числа, которые бы я хотел запомнить в автозаполнении. Шифрование данных автозаполнения с использованием мастер-пароля было бы также уместно.

    Капча


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


    Собственное автозаполнение


    Если вы сами реализовали автозаполнение (к примеру, с подгрузкой вариантов через Ajax), то не забудьте отключить браузерное. Обычно не забывают, но я сталкивался с этим, к примеру, на сайте Wikiled:

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

    В целом мораль: для каждого текстового поля, которое вы создаёте, на автомате прикидывайте, будет ли пользователю польза от автозаполнения в этом поле. Если нет, то отключайте. Кстати, автозаполнение по умолчанию можно отключить для всей формы, используя <form autocomplete="off">, а затем при необходимости включить для отдельных полей.

    Upd: Чтобы XHTML-документ проходил валидацию W3C, можно расширить DTD, например, так:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [
    <!ATTLIST input autocomplete CDATA #IMPLIED>
    ]>
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head><title/></head>
    <body>
    <div><input type="text" autocomplete="off" name="test"/></div>
    </body>
    </html>
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 56

      –28
      Кроме как в поисковике, автозаполнение более нигде и не нужно, имхо.
        +15
        Автозаполнение поля e-mail тоже?
        Я и не знал о таком замечательном тэге. Пошел внедрять для капчи.
          +1
          Эх, жалко что этот атрибут не validный…
          Хочу HTML 5 :"(
            +1
            Да не переживай, можно закостомайзить DTD
          +5
          у ж автозаполнение логинов на домашнем компьютере вреда не принесет, а время входа на ресурс заметрно сократит…

          с автором статьи же полностью согласен, часто встречаются автозаполнения где они не нужны…
            0
            Я имел ввиду не менеджер форм, а именно автозаполнение, как в поисковиках: вводишь слово, а он предлагает сам варианты.
              +2
              Это автодополнение
          +6
          не все современные браузеры это делают. опера этого не делает. уверен, что если бы спросили почему — ответили бы «по соображениям безопасности»

          тем более браузер не должен сохранять то что вводят, если страница отрыта через https протокол или если форма будет отправлена на такую страницу
            +2
            Ради любопытства поставил Оперу. Похоже, вы правы: нашёл только фиксированный набор полей, которые можно задать в Инструменты->Настройки->Формы. Подправил пост, спасибо.
              0
              В плане безопасности разработчики Opera правы — вводить мейл и имя приходится часто и их стоит запомнить в Wand. Запоминать же номера кредиток нельзя ни в коем случае.
              0
              Второй пункт успешно выполняется в IE ;)
              IE8 (да и IE7 вроде ) не сохраняет данные, отправленные по https.
            • UFO just landed and posted this here
                0
                >Обычно не забывают, но я сталкивался с этим, к примеру, на сайте Wikiled
                ozon.ru там в поиске такая же красота
                  0
                  у себя в блоге совсем недавно пооютключал во всех формах с капчей и рад.
                    +3
                    Надо же, никогда раньше об этом не задумывался… Спасибо.
                      –1
                      что значит даже. все страницы гугла ужастно свёрстаны, прогоните хоть первую через валидатор. гуглу работать надо а не на стандарты анонировать, с одной стороны это верно, с другой вылазит вот такими косяками в юзабилити.
                        0
                        Не стоит онанировать на валидатор, он хорошо работает с чистым html, а у гугла куча ajax'а на любой странице
                          0
                          аякс запрещает занчит тэги закрывать и значения атрибутов в кавычки брать? ну-ну. с ужасом представляю во что превратится вёртска когда придут вебсокеты.
                          • UFO just landed and posted this here
                        0
                        а пока владельцы сайтов спохватываются, автозаполнение приходится отключать пользователям…
                          +1
                          Чесно совсем не знал об этом параметре тега… пошёл ковырять сотни своего кода на отстутствие погрешности…
                            0
                            Думаю, браузеры всё же должны шифровать всю подобную информацию.
                            • UFO just landed and posted this here
                                +1
                                Если использовать мастер-пароль, то в начале сессии браузер его спросит. Если браузер закрыт (или открыт с другим профайлом), тогда не расшифруешь.
                              +5
                              Автокомплит кстати особенно раздражает в WebMoney, на капче и коде протекции.

                              P.S. Автору большуший респект
                                0
                                У себя проблему решил так — придумал специализацию для браузеров.
                                В Файрфоксе отключен флэш, и в нем сижу на хабре (потому что бесит идиотская флэш-реклама, подгружающая процессор).

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

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

                                Вот и все дела. Хотя с автором соглашусь — создатель сайтов должен продумывать и такие ньансы, особенно если это связано с биллингами, картами оплаты и прочим подобным.
                                • UFO just landed and posted this here
                                    0
                                    а AdBlock Plus на Firefox поставить нельзя?
                                    0
                                    Такое я видел даже в Google

                                    И на хабре тоже
                                      +1
                                      Хм… Никогда не пользовался автозаполнением, на всех браузерах его отключаю.
                                      А так в одном небезызвестном браузере есть вот такая фича, по-моему как раз идеальная замена тотальному автозаполнению.
                                        +3
                                        Установка мастер-пароля в менеджере паролей Firefox не приводит к шифрованию этого файла, и я не нашёл расширений, которые бы это сделали (подскажите, если знаете такие).

                                        Шифровать наверно расширению не под силу. Зато есть полезное расширение для управления тем, что сохранено: Form History Control
                                          0
                                          Интересная штука, спасибо. С ней можно было обойтись без моей HTML-ки :-)
                                          +1
                                          Думаю для FF 3.5 можно обойтись без плагинов «не сохраняющих 16 значный код», а просто воспользоваться режимом приватного просмотра. Выдержка из хелпа: «Private Browsing prevents information from being recorded on your computer.» и «Form and Search Bar entries: Nothing you enter into text boxes on web pages or the Search bar will be saved for Form autocomplete. „
                                            0
                                            Это вариант, согласен. Правда не всегда удобно: к примеру, я мог искать какие-то товары абстрактно (и я хочу, чтобы запоминались поисковые запросы), сравнивать между собой, кидать в корзину, а потом спонтанно принять решение о покупке. Если я перейду в режим приватного просмотра, то все окошки закроются и кукисы исчезнут. А с ними может быть связана корзина, если я незарегистрирован в шопе. Придётся снова всё искать.
                                            0
                                            Спасибо, со своей стороны буду добавлять этот атрибут.
                                              +1
                                              насколько я знаю, при https поля форм на запоминаются
                                              а вводить данные кредитке не на https это не особо правильно…
                                                +3
                                                Проверил только что в FF в одном из шопов: форма на HTTPS-странице и её target тоже на HTTPS, autocomplete="off" не указано. FF с радостью запомнил номер карточки.
                                                  0
                                                  значит я один такой счастливчик :)
                                                  0
                                                  Хром тоже запоминает к сожалению.
                                                  0
                                                  Иногда наоборот полезно принудительно включить: http://userscripts.org/scripts/show/1315 :-)
                                                  0
                                                  autocomplete=«off» у формы нам когда-то давал единственную ошибку валидации при XHTML. В DotNetNuke 4 это было.
                                                  Не совсем валидная фича.
                                                  Так что поосторожнее с советами.
                                                    +2
                                                    Я упомянул, что появился он только в HTML5. Жертвовать ли валидностью ради безопасности — тема для отдельного холивара, на ней останавливаться не будем :-) Но простое гугление выдаёт пару полезных советов, как убить двух зайцев. Следующий документ проходит валидацию W3C:
                                                    <?xml version="1.0" encoding="UTF-8"?>
                                                    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [
                                                    <!ATTLIST input autocomplete CDATA #IMPLIED>
                                                    ]>
                                                    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
                                                    <head><title/></head>
                                                    <body>
                                                    <div><input type="text" autocomplete="off" name="test"/></div>
                                                    </body>
                                                    </html>


                                                    Допишу апдейт в статью сейчас.
                                                      0
                                                      Иногда валидность это требование…
                                                      Даже в DNN все решаемо, но при наличии прямых рук :)
                                                    –1
                                                    Пользователю нужно отключить сохранение данных форм в браузере.
                                                      0
                                                      Ага, и вообще не пользоваться интернетом — это же опасно.
                                                    • UFO just landed and posted this here
                                                        0
                                                        Отличная статья. Спасибо.
                                                          +1
                                                          >Это не является проблемой безопасности, но частенько раздражает. Если ваш сайт предлагает ввести капчу, автозаполнение надо выключать, так как она всё равно не повторяется. Такое я видел даже в Google:

                                                          И на Хабре
                                                            0
                                                            Большое спасибо за статью, как-то до нее не задумывался о подобном эффекте, а как раз в ближайшее время пригодится.

                                                            Единственное небольшое замечание по предложенному в статье способу проверки ввода номера кредитки по регулярному выражению. Номера кредитных карт бывают не только из 16 символов (описание в wikipedia) + еще возможны пробелы.
                                                              0
                                                              Из пришедшего на ум — у Мегафона при пополнении счета автозаполнение включено.
                                                              Ужасно, признаться, напрягает каждый раз чистить ((
                                                                0
                                                                Люди, пожалуйста, не отключайте автокомплит! Реально помогает!
                                                                Дайте мне самому решить что отключать, а что нет.
                                                                  0
                                                                  Знал и использовал атрибут autocomplete, но чем шире, тем лучше…

                                                                  Кстати, не знал про запарку с hidden, спасибо.
                                                                    0
                                                                    Спасибо, хорошая статья. Не знал про возможность отключать автокомплит.
                                                                      0
                                                                      А у меня возникает такая проблема, при объявлении в начале документа

                                                                      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" «www.w3.org/TR/xhtml11/DTD/xhtml11.dtd» [
                                                                      <!ATTLIST input autocomplete CDATA #IMPLIED>
                                                                      ]>

                                                                      в firefox начинает отображаться два символа "]>", даже не знаю, что и предпринять
                                                                        0
                                                                        И в четвёрке так же… И вообще во всех браузерах, кроме Opera.

                                                                      Only users with full accounts can post comments. Log in, please.