Intereting Posts
Как изолировать запрос к другому скрипту PHP? Убедитесь, что UNIQUE-строка уже существует с помощью findBy в ManyToMany, любом обходном решении или рабочем решении? Вставка, обновление, удаление -> Нормализация и заголовок кода Есть ли в Интернете PHP IDE? сохранить изображение из URL-адреса, а затем сохранить его в каталог php Удалить числовой префикс из строки – PHP regex Запуск PHP-скрипта раз в минуту Конкатенация __DIR__ константа со строкой в ​​виде значения массива, являющегося членом класса в PHP OpenCart: Где находится div для выпадающей информации корзины заголовков? Как я могу разобрать XML для получения нескольких текстовых блоков с помощью SimpleXML? Сортировка 5-мерного массива по дате в 5-м измерении с использованием php? Как разбить содержимое MySQL (text + html content) на столбцы? PDFlib для php, есть ли альтернатива Symfony2 – Как поставить метку и ввести флажки / радиостанции в одной строке? Проверьте, существует ли файл cookie PHP и не задан ли его значение

Двухфакторная система аутентификации

Я пытаюсь создать двухфакторную систему аутентификации (на PHP) с использованием SMS в качестве второго метода auth. Это для тестового проекта, таким образом, может кто-нибудь помочь мне разработать эту услугу?

Это будет веб-система, а ниже – то, что я сделал до сих пор.

  1. Как только клиент войдет в Имя пользователя и пароль, веб-сайт отправит на наш сервер безопасный HTTP-запрос с MSISDN, UID (для идентификации сеанса), их UserID и PassWord.

  2. Наш сервер добавит запрос в БД MySQL и ответит на сайт кодом, UID и некоторой другой информацией.

  3. Наш сервер отправит клиенту SMS с одноразовым паролем.

  4. После того, как клиент войдет в OTP на веб-сайт, веб-сайт отправит другой запрос HTTPS с зашифрованным OTP на наш сервер, и мы отправим код успеха или отказа в качестве ответа.

это поток, о котором я думал. У кого-то есть лучший поток? или предложения?

Благодарю.

Похоже на действительный механизм. Но что, если устройство SMS не находится в зоне обслуживания? Или мертвая батарея?

Это может работать нормально, однако это не двухфакторная аутентификация .

В дополнение к паролю, вторым фактором может быть:

  • Что-то у вас (например, secureid, smartcard и т. Д.).
  • Что-то вы (т.е. различные формы биометрии).

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

Чтобы квалифицироваться как второй фактор, вам необходимо гарантировать, что владелец устройства (то есть предварительно зарегистрированный сотовый телефон) является единственным, кто мог бы получить SMS.
В сегодняшних сотовых сетях это просто не так. Есть взломы для копирования, например, SIM-карты; операторы сотовой связи могут перехватывать; смартфоны могут иметь приложения, которые перехватывают и повторно отправляют; и т.п.
Кроме того, если пользователь вводит код обратно на сайт, он позволяет всем стандартным веб-атакам на этот дополнительный пароль: обнюхивание, перехват, MITM, захват сеанса и т. Д. …

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

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

Я бы добавил, что отправка OTP через SMS по-прежнему считается двухфакторной аутентификацией. Комментарий от Avid ясен

2-го фактора, вам нужно будет гарантировать, что владелец устройства (т. Е. Предварительно зарегистрированный сотовый телефон) является единственным, кто мог получить SMS.

Но то же самое применимо, скажем, к аппаратной маркерной базе 2FA. Как можно гарантировать, что аппаратный токен используется только одним человеком? Кража ключа (или поиск OTP на его экране) еще проще, чем перехват SMS

@megazoid, вы считали использование поставщиков «2FA как сервис»? Например, Authy.com , Token2.com или DuoSecurity ?

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

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

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

Кража семян ключа от продавца, это гораздо лучший вектор атаки, который также был показан в прошлом 😉

Вот почему вы должны думать об использовании аппаратных токенов, которые вы можете засеять самостоятельно. Поэтому вы можете быть уверены, что семя принадлежит вам только. Сеянные жетоны – это юбикеи, eToken Pass и eToken NG OTP.

Во всяком случае, для среды с «низкой безопасностью» даже с использованием SMS может быть в порядке. Но вы должны знать о последствиях. Кстати, все эти жетоны поддерживаются проектом с открытым исходным кодом privacyIDEA .

Я приглашаю вас искать идеи для клиентов, которые мы открыли для Duo для нашей двухфакторной системы аутентификации:

https://github.com/duosecurity/duo_web

Другим местом для поиска являются существующие сторонние протоколы аутентификации, такие как OAuth и OpenID.

Две вещи, о которых вы не упоминали:

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

Рики из Твилио здесь.

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