Что нужно сделать чтобы авторизоваться

Авторизация — что это такое?

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

Что такое авторизация?

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

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

Логин (с англ. вход в систему) – это имя, которое используется для входа на сайт. Пользователь придумывает его сам. При этом логины разных пользователей не могут повторяться, иначе нельзя будет пройти авторизацию.

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

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

Процесс авторизации

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

Благодаря авторизации человек может получить некоторые привилегии по сравнению с теми, кто на этом же ресурсе не зарегистрирован.

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

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

Зачем нужна авторизация?

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

Но почему бы не обойтись без авторизации? Часто очень раздражает необходимость заполнять анкеты, вводить о себе информацию. Может быть было бы гораздо проще обойтись без этого всего? Особенно, если пользователи часто забывают логины и пароли для входа. Учетных записей на разных сайтах у одного человека может быть не один десяток.

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

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

Авторизация имеет слишком много преимуществ, чтобы от нее отказываться:

Источник

Введите пароль: обзор форм авторизации и альтернативных способов идентификации пользователей

Сооснователь агентства Brolik Дрю Томас написал для издания Smashing Magazine материал о способах идентификации пользователей и оценил их удобство, безопасность и распространенность использования.

Редакция рубрики «Интерфейсы» публикует перевод текста, выполненный юзабилити-студией «Турум-Бурум».

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

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

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

Истоки проблемы

Все мы не очень любим авторизацию через пароль. Чем больше сервисов мы используем, тем больше паролей приходится запоминать.

Приложения SaaS, социальные сети и другие службы требуют соблюдать строгие правила введения паролей, которые затрудняют вход в систему для честных пользователей. Неужели авторизация вида «имя пользователя и пароль» настолько незаменима, что мы готовы смириться с этим препятствием при использовании сервисов и продуктов?

Дело не в самих паролях — проблема заключается в масштабе, ведь людям приходится запоминать множество имен и паролей, они испытывают дискомфорт. А мы не хотим, чтобы наши продукты стали менее безопасными, когда мы понизим стандарты защиты в угоду удобству пользователей. Как же обеспечить надежную безопасную идентификацию и защиту конфиденциальных данных?

Для этого уже есть несколько методов и постоянно появляются новые. Традиционную аутентификацию при помощи пароля можно сделать комфортной и удобной. Вот актуальные способы:

Я буду оценивать каждый метод, исходя из нескольких факторов:

Имя пользователя и пароль

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

Буду честен: у меня возникают проблемы с традиционной моделью. В идеальном мире я бы устранил пароли вообще, но в реальности я пользуюсь этим методом в 99% своих проектов.

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

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

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

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

Ограничивать или исключать правила для паролей

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

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоватьсяРегистрация на сайте GoDaddy

В США и Великобритании 73% взрослых людей используют на всех своих аккаунтах один и тот же пароль. Если ваши правила не дают пользователю использовать его стандартный пароль — он создает уникальный и, как правило, очень быстро его забывает. Исключив правила для паролей, вы даете пользователю возможность помнить пароль, чем повышаете юзабилити своего сервиса.

Зачем нам навязывают этот комплекс правил? Существуют исследования, которые утверждают, что длинные пароли эффективнее паролей с различными символами, но об этом я расскажу позже.

Напоминать пользователю о правилах

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

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоватьсяАвторизация на cайте BrowserStack

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

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

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

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

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоватьсяПодсказки Люка Вроблевски

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

Конкретизировать сообщение об ошибках ввода

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

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

Кодовая фраза

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

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

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

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

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

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

Впервые я использовал пароли-фразы с компанией интернет-банкинга Simple, которая приветствует эксперименты и новые технологии, и они показали себя прекрасно. Мою фразу-пароль просто запомнить и легко набрать — особенно на мобильном телефоне.

Двухфакторная авторизация

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

Двухфакторная идентификация — это еще одно расширение традиционной идентификации при помощи пароля. После проверки комбинации имени пользователя и пароля уникальный код или URL пересылается по электронной почте либо отправляется SMS-сообщением владельцу аккаунта, который пытается войти в систему.

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

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоватьсяАвторизация в приложении Google

Google предоставляет возможность двухфакторной идентификации во всех или почти во всех своих сервисах. В случае с Gmail используется уникальный код. Другие службы отправляют этот код или ссылку на адрес электронной почты пользователя.

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

Google хорошо справляется с идентификацией. Компания используют правило «Доверять этому устройству 30 дней». Кроме того, она предлагает опцию двухфакторной аутентификации как один из вариантов и поощряет его применение, ни к чему не принуждая пользователей.

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

Социальный вход

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

Социальный вход или вход через авторитетный проверенный сайт — популярный и удобный способ идентификации. Он предназначен не только для входа в систему. У American Express есть Amex Express Checkout, откуда вы входите на свой Amex-аккаунт, чтобы безопасно оплачивать товары на сторонних сайтах. Вы идентифицированы, и уже не нужно отправлять данные кредитной карты продавцу.

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

Однако чаще всего социальный вход означает возможность войти в сторонний сервис или в приложение с помощью Facebook, LinkedIn или Twitter.

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

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

Тем не менее статья MailСhimp от 2012 года понятно объясняет, почему сайт был против социального входа (и, судя по всему, с тех пор не поменял позицию). Сервис аргументирует это тем, что социальный вход создает слишком много неудобств для пользователя. Даже при однократной регистрации в варианте социального входа и при запасном варианте входа пользователь должен запомнить, как именно он регистрировался в самом начале.

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

Беспарольная авторизация

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

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

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

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

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоватьсяАвторизация в Slack

У Slack есть очень хороший пример беспарольной идентификации. На разных этапах входа в систему и процессов сброса пароля сервис использует «волшебную ссылку» (magic link) для идентификации пользователей. Уникальный URL отправляется на электронный адрес пользователя, и этот URL открывает приложение и позволяет ему войти.

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

Биометрическая идентификация

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

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

Наиболее распространенный пример — Touch ID компании Apple. Такие вещи действительно восхищают. Биология — наша истинная идентичность, она всегда с нами. Мы знаем об идее разблокирования телефонов или планшетов при помощи отпечатка пальца. Тем не менее биометрическая идентификация используется и в других местах (и с другими параметрами).

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

Windows Hello — это перспективная система идентификации для Windows 10, соединяющая камеры с датчиками (на компьютерах и устройствах) для распознавания лица, радужки глаз или отпечатков пальцев. Нужно просто открыть компьютер и заниматься своими делами, не жертвуя при этом безопасностью. Этот тип идентификации был до недавнего времени невозможен, особенно в масштабе Windows 10.

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

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

Биометрическая идентификация только начинает развиваться, но некоторые API и библиотеки позволяют нам пользоваться биометрической идентификацией уже сегодня. К ним относятся BioID Web Service, KeyLemon, Authentify и Windows Biometric Framework API (на котором, как мне кажется, построена Hello).

Авторизация с помощью подключенного устройства

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

Авторизация с помощью подключенного устройства — это идентификация через Bluetooth (или нечто подобное), то есть присоединение одного устройства к другому, которое уже идентифицировало пользователя.

Например, для Mac OS X есть приложение KeyTouch, позволяющее авторизоваться на компьютере со сканом отпечатков пальцев со своего iPhone. Есть еще и Knock, который позволяет кликнуть по телефону, чтобы разблокировать компьютер.

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

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоватьсяПриложение Tether для iPhone

В домашнем офисе я использую приложение Mac OS X и iOS под названием Tether («связка»). После однократной синхронизации компьютера и телефона компьютер блокируется и разблокируется — в зависимости от близости телефона к компьютеру.

Tether сэкономил мне массу времени. Набор моего пароля с заглавными буквами, цифрами и символами может занять всего три или четыре секунды, но много раз повторять это каждый день, неделю и месяц — это уже слишком. Благодаря идентификации подключенного устройства к тому времени, когда я сажусь в кресло, мой компьютер уже разблокирован. Еще один пример — ключи от машины с Bluetooth.

Что же теперь делать

Мы провели опрос в Twitter, и оказалось, что из всех перечисленных вариантов чаще всего используется старая добрая авторизация через логин и пароль (49%), а за ней следует социальный вход (28%).

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

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

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

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

Источник

Надёжная авторизация для веб-сервиса за один вечер

Что нужно сделать чтобы авторизоваться. Смотреть фото Что нужно сделать чтобы авторизоваться. Смотреть картинку Что нужно сделать чтобы авторизоваться. Картинка про Что нужно сделать чтобы авторизоваться. Фото Что нужно сделать чтобы авторизоваться

Предыстория

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

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

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

Что делает в случае взлома грамотная система? Блокирует аккаунт (совсем хорошо — если автоматически, по ряду необычных признаков в поведении пользователя), в дальнейшем предлагая средства для восстановления: привязанный телефонный номер, контрольный вопрос, и т.д. Привязка сотового — отличная мера с крайне высокой надёжностью. К сожалению, у нашего проекта не было на это средств, поэтому приходилось обходиться без этого. Благо, блокировку можно реализовать, посадив человека на специальный почтовый ящик, или даже принимать экстренные звонки на сотовый.

И тут традиционный метод, который применяют многие начинающие разработчики (найденный в книгах, либо в статьях в интернете) даёт осечку. Дело в том, что этот метод предполагает хранение авторизации в сессиях. Это статья не относится к конкретному языку, и справедлива для любой платформы, но я буду иллюстрировать всё на примере PHP.

Стандартная реализация

Итак, сессия в PHP по умолчанию хранится в файле. Её id сохраняется в cookie (если куки отключены — задействуется механизм передачи через адресную строку, если это не отключено в конфигурации). Время жизни такой сессионной куки по умолчанию — до момента закрытия браузера (и обычно его никто не меняет). Поэтому более продвинутые программисты реализуют галочку «запомнить меня», либо реализуют её функционал по умолчанию, без возможности отключить. Что они делают? Просто сохраняют в собственной куке айди пользователя. Но поскольку просто айди хранить как-то уж слишком стрёмно (любой может поставить любое число и получить доступ к произвольному аккаунту), то часто вместе с айди за компанию сохраняют и пароль. В открытом виде.

Если кто-то не понимает, чем это плохо — представьте себе, что у нас пользователь пользуется очень старым, либо очень плохо реализованным браузером. Мы ведь не можем гарантировать, что браузер надёжно шифрует куки? Да и вирусы всякие могут быть у пользователя на компьютере, и в случае особо серьёзной малвари может не спасти и шифровка — зловред может попытаться считать значения прямо из памяти, когда они расшифрованы. Человек, случайно оказавшийся у вашего компьютера в ваше отсутствие — сможет просто скопировать себе все интересующие куки, и в новых браузерах этот процесс стал ещё проще. Дыры в безопасности браузера могут потенциально привести к тому, что ваша кука станет доступна стороннему сайту (да, сейчас это крайней маловероятно, но чем чёрт не шутит).

Ну и самое главное — если у нас SSL используется только при авторизации (а на остальных страницах его решили отключить ради выигрыша в скорости, либо чтобы лучше работало промежуточное кэширование)… То наш пароль всё время передаётся открытым текстом. При каждом запросе. А пароль меняют редко, то есть это некий токен, который имеет долгий срок жизни. А теперь представим себе, что наш трафик кто-то перехватил…

Как быть?

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

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

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

Но если пароль всё же утёк — мы по-прежнему бессильны. Даже сменив пароль через форму восстановления либо изнутри системы — взломщик останется залогинен, пока не закроет браузер. Ведь в основе авторизации у нас всё ещё лежит сессия.

Можно, конечно, на PHP получить id сессии при логине, записать его куда-то в базу, а при сбросе пароля стартовать по очереди все сессии с айдишниками из базы и делать session_destroy()… Возможный вариант, но не обязательно следовать ему.

Итак, мы сформулировали основной список требований к нашей системе:

1. Быть простой в реализации
2. Желательно не зависеть от используемой серверной платформы
3. Позволить «выкинуть» взломщика из системы, завершив все открытые сессии, либо некоторые из них (на основе браузера/операционной системы/времени логина)
4. Видеть список всех своих открытых сессий в системе, просматривать его
5. Максимально затруднить атаку в случае отсутствия SSL (например, открытый Wi-Fi)
6. Не создавать неудобств легитимным пользователям

Приступаем к работе

Перво-наперво создадим в нашей базе данных (будем считать, что мы используем реляционную СУБД) таблицу для хранения сессий. Наших сессий (не путать с PHP-шными!). Таблица будет иметь следующие поля: id, user_id, ip, user_agent, time. В качестве времени будем хранить время создания сессии. Можно хранить и время последнего доступа, но вскоре мы увидим, что это избыточно, и можно к этому прибегнуть лишь в рамках денормализации, чтобы ускорить выборку данных. Создаваться сессия будет в момент авторизации, а также при регистрации (мы хотим, чтобы после регистрации пользователю не приходилось заполнять форму логина, и тут же авторизуем его). Также создадим вторую таблицу — log, с таким же набором полей. Туда будем добавлять запись при каждой авторизации (через форму входа или по кукам).

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

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

Создадим в таблице сессий ещё одну колонку — hash. Будем использовать её для хранения хэшей наших сессий.

Вопрос удобства

Но тут мы сталкиваемся с другой проблемой. Клиент может переключаться между разными IP (как минимум между домашним Wi-Fi и 3G в дороге, а ещё рабочим защищённым Wi-Fi, как пример). И было бы очень негуманно заставлять его вводить заново логин и пароль каждый раз при смене IP адреса. Как быть, хранить в куке целый список хэшей? При запросе на сервер отсылать его? Можно, но это несколько усложняет реализацию. Кроме того, это раздувает размер куки (при том, что нам основную часть времени может требоваться всего один хэш, мы будем хранить все когда-либо использовавшиеся), а при очистке кук мы (как пользователь) потеряем их все, и опять придётся с каждого IP адреса вводить пароль вручную.

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

Делегирование полномочий

Что нам это даёт? Мы можем запихать в этот скрипт сколь угодно хитрую логику, вплоть до анализа последних действий пользователя и добавления его в бан-лист по IP, либо блокировки его аккаунта на тот или иной срок. Но сперва реализуем очень базовую функциональность: будем сверять значение хэша, пришедшего из куки, с тем, что должно было бы получиться, если хэш не был искажён. Сервер знает IP, знает юзер-агент, знает пароль текущего пользователя… Кажется, всё готово!

Разобьём начальную стадию нашего внешнего скрипта (это тоже можно вынести в отдельный файл, но в данный момент это не важно) на два этапа. На первом мы смотрим, установлена ли обычная сессия PHP. Если нет — сразу перебрасываем пользователя на форму авторизации. Но форма при загрузке проверяет наличие кук, и если кука с хэшем нашей сессии существует, и хэш совпадает с ожидаемым (хэш-функция от пароля* и юзер-агента), то ставим переменные сессии (в первую очередь user_id), делаем запись в таблицу log, и обратно перебрасываем пользователя туда, откуда он пришёл (адрес раздела для возврата разумно передавать прямо в ссылке). Итак, если нет PHP-сессии, но есть куки, и куки соответствуют браузеру — пользователь залогинен.

Теперь рассмотрим вариант, когда сессия есть (после того, как пользователь залогинен по паролю из формы или по кукам, он тоже попадёт на этот шаг). И вот тут вступает в игру наш скрипт security.php. Вот его код:

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

Скрипт прост как дважды два. Мы проверяем наличие сессии с нашими текущими параметрами и нашим текущим хэшем. Если что-то не совпало — нас попросят пройти повторную авторизацию через редирект. И вот тут происходит самое вкусное. Если у нас поменялся только IP — мы пройдём проверку, для нас создастся новая сессия, если её нет для этого IP (этот момент надо включить в код авторизации), и создастся новая кука.

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

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

Наконец, можно очень эффектно моментально отключить доступ к аккаунту. Для этого даже не обязательно удалять строку с сессией. Достаточно удалить/поменять/добавить один символ в хэше (последнее поле). Пример из жизни — если легитимный пользователь по счастливому стечению обстоятельств первым успеет воспользоваться кнопкой смены пароля в кабинете — взломщика выкинет, причём при первой же перезагрузке страницы. У настоящего пользователя уже будет новая кука (в хэше будет использован новый пароль), старые сессии будут полностью удалены из таблицы, а новая сессия создана с новым хэшем. А взломщик останется со старым невалидным хэшем, который не пройдёт проверку в security.php. При первом же непрохождении будет сброшена сессия PHP, и выполнен редирект на авторизацию. Которую, опять же, нельзя пройти, имея неактуальный хэш от старого пароля.

Всё хорошо?

Почти. Данная система по-прежнему не защищает от кражи хэша из кук при открытом канале и отсутствии SSL. Кроме того, сложно обеспечить своевременную блокировку, если доступ к аккаунту утерян (особенно если взломщик уже сменил пароль). В этом случае очень помог бы сброс пароля через смс-команду с привязанного телефона — но для этого уже нужна возможность принимать и отправлять смс. А если она есть — то можно сразу внедрить двухфакторную авторизацию, которая снимет массу проблем. Но не проблему с необходимостью в SSL — поскольку всё равно результатом любой авторизации является получение некого токена доступа, работающего ограниченное время. И этого времени может быть достаточно, чтобы сделать от нашего имени что-то, что нам не понравится.

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *