Темная сторона авторизации
Многие ресурсы последнее время подвергаются нападениям на пользовательские данные. В сети ходят туториалы и рекомендации как самим пользователям не допустить кражу аккаунта. Но многие понимают что это из пушки по воробьям, большая часть все равно проигнорируют. В данной статье я хотел бы рассмотреть поближе весь процесс от регистрации до нового пользователя, и быть может предложить что-то новое.
Анализируем проблемы
Шаблон
Что на данный момент мы имеем. Это формы регистрации, авторизации, смена паролей. Подтверждения на email. Это тот нерушимый шаблон по которому мы познаем новые ресурсы в сети. Есть конечно еще всякие средства типа OAuth, OpenID, но о них чуть позже.
Если на время откинуть внешнею авторизацию, не везде она есть в конце концов. То мы понимаем, что нам надо хранить пароли для каждого ресурса. Поэтому умные люди посидели, подумали и родили менеджеры паролей. Они почти идеальны. Хранят сколь угодно много паролей, даже могут генерировать их! База защищена, синхронизируема и доступна на многих платформах. И кажется что это свет в конце туннеля, только блин как-то странно гудит и пыхтит он.
Осознание
Чего же не так с такой клевой программой? Ну первое - об ней знают только гики. И в этом нет ничего особого, ведь зачем обычному человеку такая штука. Ведь его 8 значного пароля на все хватает, а 8 знаков это много и надежно. Еще юзверы не понимают, что взломав его учетку на каком-нить старом дырявом phpbb, совершенно не сложно найти его учетки на других ресурсах и использовать те же данные. Поэтому я постоянно слышу мол у меня есть набор паролей - это овер надежно, зачем мне ещё что-то. Проблема один - надо быть в теме, что бы защитить себя.
Костыль
Что привносит программа? Да ничего кроме неудобства. Забивай туда пароли, куда-то резервируй данные, синхронизируй. Выбирай длину и сложность пароля, мучайся когда они не подходят. Потом указывай, куда и как эти пароли вбивать. А частенько приходится нисходить до ручного копирования и вставки. А на всяких iOS, Android еще хуже. Если вообще найдете для них реализацию. Проблема два - это еще одно сложное и муторное звено.
Но это все семечки, потому что при утечки базы данных паролей, никто не гарантирует что сервис не хранит их в plain text или md5. Или что еще хуже, никто может и не узнать об этом инциденте. А сегодняшняя вычислительная мощность позволяет перебирать пароли довольно быстро. Проблема три - менеджеры паролей не дают полную защиту
Внешняя авторизация
Многие сервисы предоставляют сейчас авторизацию через социальные сети, или другие именитые ресурсы. Такое поведение считается плюсом, но мне так не кажется. Что будет если ваш основной аккаунт украдут, ну или еще проще, просто заблокируют, или вы сами захотите его поменять. У вас начнутся повальные проблемы и с другими ресурсами. И будет все как в сказке про разбитое корыто.
Это простой ход событий. Но я как параноик мучаюсь при виде надписи "Дать права ...". Какого ляда? Я хочу просто авторизоваться, а не предоставлять какой-то доступ или права к моим данным. В общем проблема четыре - сильная зависимость при внешней авторизации.
Подводим итоги, момент истины
После не очень детального исследования я набрал четыре, на мой взгляд, наиболее серьезных проблемы взаимодействия между пользователем и паролем. Первое, надо знать врага в лицо. Второе, это сложно и муторно. Третье, гарантия безопасности не предполагается. Четвертое, внешняя авторизация не так хороша как кажется.
Не знаю как вы, а у меня в голове крутится одно слово - стандартизация. И это не просто единое поведение менеджерей паролей. Это полная автоматизация процесса регистрации, подтверждения, авторизации, хранения и смены пароля. И именно об это я и хочу поговорить в этой статье.
Излагаем возможное решение
Спецификация
Необходимость стандартного поведения очень важна, это верный путь к автоматизации процесса. Представьте что в один прекрасный день вам на новом ресурсе понадобиться нажать кнопку "Зарегистрироваться", вяло окинуть взглядом форму с уже подставленными данными и ткнуть "ОК". И все!
Конечно надо что бы сами операционные системы поддерживали такое из коробки, без дополнительного ПО. Иначе перед нами встанет все та же первая проблема. Это нелегко, но какая выгода! Пароли могут быть сколь угодно сложными, не мы же его набиваем, собственно их значимость скоро уйдет в небытие. Логин и другие данные вам предложат из вашей базы знания и доступных на ресурсе.
Все поля должны быть тегированы и доступны для анализа программам для ведения учетных записей. Должны быть описаны все стандартные поля, их поведение, длина и т.д. Это не очень сложное действие может привести к огромным возможностям по манипуляциям с учетными данными. И я говорю не только о вебе, это касается любых форм.
Все это бесполезно без протокола. При регистрации вы не должны взаимодействовать с веб формой. Ваш менеджер учетных записей должен взаимодействовать с сервисом на прямую. Минимум напрягая вас, это и есть решение второй проблемы.
Безопасность
Все это очень удобно и красиво, но как оно защитит нас от взлома или утечки базы паролей у ресурса? Все просто, при имеющимся протоколе общения можно менять пароль хоть каждый день. Что сделает бесполезным его подбор. Как дополнение можно реализовать сервис на котором заявляют о возможных утечках, и оперативно доставляют эту информацию конечным пользователям. Вот и с третьей проблемой разобрались.
Неплохо было бы иметь отдельные ключи(пароли) для активации, блокирования аккаунта. Дабы иметь возможность воздействовать на аккаунт даже есть утекли cookie. Но это уже детали.
Но многие уже заметили что все упирается в один пароль. И опытные пользователи наверное жаждут сказать - все фигня, паяльник решит все проблемы. И знаете, да. Тут не поспоришь. Но есть одна тонкость, что бы применить пароль надо иметь архив от менеджера. А это сильно сложнее и нетривиальней чем пойти на сайт и подобрать "qwerty". Да и не за горами сканер отпечатков, и другие вкусные технологии. Так что это горлышко сильно тоньше нынешнего.
Внешняя авторизация
Может это мои тараканы, но мне не нравится когда приходится регистрироваться через внешние сервисы. Надо помнить через какой именно сервис ты это сделал, под какой учеткой и т.д. Обычно еще появляется уведомление о получение прав на то, что ты бы не хотел давать. Но отказаться нельзя. Да и сервис авторизации еще начинает знать о тебе лишнее.
Но большие сервисы довольно эффективно справляются с отличием ботов от реальных людей. И это единственное, что я бы хотел видеть при регистрации. А именно подтверждение что Я не бот, все.
Напоследок
Тема паролей и авторизации интересная и говорить о ней можно долго, всех мыслей не запишешь. Однако основные вехи я указал, есть над чем подумать.