Это история о том, как для простого поля «введите код из СМС» был построен велосипед с большим количеством колес неправильной формы.
Предлагаю вам покритиковать универсальный модуль двухфакторной аутентификации.
Проблема
Однажды начальник попросил добавить в один веб-сервис двухфакторную аутентификацию.Пользователи уже давно заходили по логину и паролю, но пришлось добавить подтверждение входа по СМС.
Подходящего готового решения в Интернете не нашлось, поэтому нужно делать самому.
Но что поделать, к вечеру все будет сделано! В общем, через три дня форма входа запросила номер мобильного телефона и потребовала ввести код из СМС.
SMS было отправлено через API одного из многочисленных SMS-провайдеров за небольшие деньги.
Вскоре решение было перенесено с помощью файла в другую веб-админку на PHP. Через пару недель стало приходить много жалоб на то, что СМС-сообщения приходят с огромной задержкой, либо не приходят вообще.
Мы решили изменить шлюз отправки сообщений.
Естественно, на обоих сервисах.
Это помогло ненадолго; стало ясно, что необходим резервный канал отправки.
Это заняло еще день или два.
Затем, спустя несколько месяцев, на одном из сервисов злоумышленник обналичил все деньги, которые находились на счету СМС-провайдера.
Пришлось еще немного усложнить систему и продублировать решение.
Следующий сбой произошел, когда мобильные операторы перешли на новые правила отправки СМС относительно содержимого поля отправителя.
При этом случайно обнаружилось, что двум коллегам в офисе не пришло СМС для входа в систему клиентов двух разных очень крупных банков.
Тогда стало ясно — хватит с этим мириться, миру нужно универсальное решение для двухфакторной авторизации по SMS!
Постановка задачи
Было решено сделать супер универсальный и надежный модуль двухфакторной авторизации по СМС, который можно легко интегрировать в любой сайт, и продавать его по подписке! Да здравствует стартап! Для портативности и безопасности было решено поместить всё, что можно, на сервер отправки СМС и в JavaScript, чтобы на сервере сайта было как можно меньше кода.После вдумчивого рассмотрения получилась вот такая архитектура.
Предполагается, что сервер сайта только проверяет логин и пароль перед включением двухфакторной аутентификации.
После подключения они проверят ваш логин, пароль и одобрение от сервера авторизации по СМС.
В этом случае сервер СМС-авторизации будет хранить идентификаторы пользователей сайта и их номера телефонов, но логины и пароли останутся ему неизвестными.
Запрос от сайта к серверу авторизации проходит через браузер пользователя.
Сервер сайта полностью абстрагируется от концепции SMS и получает только одобрение от сервера авторизации.
Сервер сайта устанавливает cookie с запросом подтверждения по SMS. JavaScript обнаруживает этот файл cookie и инициирует связь с SMS-сервером через AJAX. Сообщение об успешной СМС-верификации передается на сервер сайта также с помощью файлов cookie. Сайт авторизуется, когда ему отправляются правильный логин, пароль и cookie с подтверждением от сервера авторизации по SMS.
Безопасность
Запросы между сайтом и серверами авторизации проходят через браузер пользователя.Чтобы он не смог их подменить, мы будем подписывать каждый запрос ключом, который знают оба сервера, но не знает браузер.
Мы также назначим дату истечения срока действия пакета данных, передаваемого между серверами.
После таких ограничений максимум, что можно сделать после полной компрометации браузера – это перехватить логин, пароль и одобрение с сервера авторизации.
Это позволит вам одновременно зайти на атакуемый сайт с другого компьютера.
Предполагается, что злоумышленник в этом случае поступит проще и просто отберет сессию! Если сервер авторизации скомпрометирован, злоумышленник узнает номера телефонов пользователей и сможет подделать ответы от сервера авторизации.
Однако для доступа к аккаунтам на сайте этого недостаточно; вам необходимо знать логины и пароли, которых нет на сервере авторизации.
Браузер и сервер авторизации общаются через AJAX через https, перехватить их данные проблематично.
Если форма авторизации на сайте работает еще и по HTTPS, то атаковать здесь сложно, иначе двухфакторная аутентификация не поможет от более простой кражи сессии.
В целом такой подход к организации двухфакторной аутентификации хоть и выглядит запутанным, но производит впечатление очень безопасного.
Что сделано
Вы действительно можете посмотреть и скачать его на Magiclogin.ru .
На данный момент модуль двухфакторной авторизации по СМС доведен до рабочего состояния и работает на нескольких сайтах.
- Для установки на сервер сайта написан PHP-класс, есть подробная инструкция по установке.
- Интерфейс «Введите код из СМС» реализован в виде модального окна, которое генерируется с помощью JavaScript.
- Поддерживает IE 7+, современные Chrome, Firefox, Opera, Safari, Android.
- Пользователь может изменить номер телефона.
- Вы можете разрешить пользователям отказаться от двухфакторной аутентификации.
- Имеется админ-панель для просмотра статистики и оплаты.
Ближайшие планы
- Делайте плагины для основных движков на PHP.
- Очень хочу сделать класс для сервера сайта на C#, Java, Python.
- Создайте конструктор цветовой схемы модального окна.
Теги: #двухфакторная аутентификация #смс #смс #модуль для php #MagicLogin #занимаюсь пиаром
-
Создание Сайта Для Вашей Компании
19 Oct, 24 -
Гантт Против Бэклога
19 Oct, 24 -
Обычная Отладка В Netbeans
19 Oct, 24 -
Android Ndk Против Sdk Против Iphone
19 Oct, 24