Какова лучшая логика системы входа в систему php для уникального устройства? - PullRequest
0 голосов
/ 01 марта 2019

Я работаю над важным проектом, который требует высокого уровня безопасности при аутентификации входа.Менеджер compay сказал мне, что он хотел бы разрешить клиентам вход в систему только на 1 устройстве (ПК, стол или мобильный телефон), чтобы только это устройство имело доступ к входу в свою учетную запись, даже когда он передает адрес электронной почты и пароль кому-то еще,он не должен позволять другим входить в свою учетную запись, поэтому каждый клиент имеет свою учетную запись и доступ к ней возможен только с одного устройства.Я проводил исследования, но не нашел много ответов на свой вопрос, поэтому до сих пор я делал это ..

После того, как они были зарегистрированы в базе данных, я добавил 2 столбца в пользовательскую таблицу с именем cookie, иПервым, что увидел пользователь, была страница «Получить доступ только к вашему устройству», он нажал кнопку, и файл cookie был создан для его устройства и в то же время в базе данных, так что оттуда я мог установить уникальное соединение для пользователя.Сейчас я спрашиваю, есть ли более безопасный способ сделать уникальную регистрацию для пользователей, например, что-то на ПК, на котором хранится файл с ключом, или что-то еще, что нельзя удалить путем очистки данных истории?Было бы очень полезно дать мне советы по этому разделу ...

1 Ответ

0 голосов
/ 04 марта 2019

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

Другой вариант - использовать уникальное устройство как частьдвухфакторная аутентификация (2FA).Используйте номер телефона и отправляйте SMS-сообщение, содержащее несколько случайных цифр, на свой телефон при каждом входе в систему (например, Twilio - достойный сервис для этого, но может стоить довольно дорого, если вы отправляете много SMS-сообщений).Это позволяет кому-либо войти в систему с любого устройства по своему выбору, но у него должно быть соответствующее устройство в его распоряжении.Чтобы ограничить вход в систему одним плавающим устройством, вы можете настроить его таким образом, чтобы для одного аккаунта одновременно разрешался только сеанс.Таким образом, если кому-то еще удастся войти (очень сложно), другое устройство будет выгнано.Привязка учетной записи к выданному компанией телефону и использование SMS означает, что устройство почти наверняка находится в распоряжении человека во время входа в систему.

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

Отправка кода 2FA по электронной почте и использование Google Authenticator (приложения) - это два дополнительных варианта 2FA, которые не требуют затрат.Я реализую оба из них в программном обеспечении с открытым исходным кодом CubicleSoft Single Sign-On (SSO):

https://github.com/cubiclesoft/sso-server

Я также рекомендую использовать короткий тайм-аут сеанса (например, 5-минутное плавающее окно),Пока вкладка браузера открыта, отправляйте периодическое сердцебиение на сервер, чтобы поддерживать сеанс (или не требовать взаимодействия для поддержания сеанса - это зависит от приложения).Как только все вкладки закрыты, сеанс завершается, что требует от пользователя повторной регистрации.Приведенный выше серверный продукт SSO также поддерживает управление короткими сеансами из коробки.Сочетание механизма 2FA с короткими сеансами снижает вероятность входа нескольких пользователей в одну учетную запись на нескольких устройствах.

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

Однако, если вы ДЕЙСТВИТЕЛЬНО хотите привязать регистрацию к одному устройству, вам следует заглянуть вобщее направление «дактилоскопия веб-браузера».Отрасли рекламы и аналитики постоянно ищут способы сделать то, что вы описываете, чтобы они могли точно отслеживать человека, путешествующего по сети, не полагаясь на куки-файлы браузера, так что информация об отслеживании сохраняется, даже если куки / localStorage удалены.

Этот сайт упоминает и демонстрирует несколько методов:

https://browserleaks.com/

Другой вариант - использовать идентификаторы подключенного аппаратного устройства:

http://cubicspot.blogspot.com/2019/01/hardware-fingerprinting-with-web-browser.html

К телефонам и планшетам почти всегда подключена камера.Ноутбуки вообще тоже делают.Настольные ПК могут этого не делать.

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

Предупреждение: Делать что-то уникальноеИдентификация устройства или пользователя без их явного разрешения является возможным нарушением GDPR и / или Закона штата Калифорния о защите прав потребителей от 2018. Ваш работодатель должен проконсультироваться с юристом, если они ведут бизнес в ЕС или Калифорнии, и будет использовать вашу систему входа в систему с пользователями вэти локали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...