Как всё-таки правильно сделать аутентификацию на php?

[]
Здравствуйте. С наступающим Новым Годом всех.
Насчёт вопроса, да, таких вопросов было много, статей тоже много... В общем всё это смешалось и не знаю теперь как правильно сделать.
Использовать фреймворки, CMS и т. п. не планируется.


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

Так вот, я думаю как это лучше сделать..

Пользователь вводит почту (Логин) и пароль. В базе данных ищется такой логин, с помощью password_verify() проверяется пароль и если всё правильно, то в сессию записывается id пользователя, а в куки записывается token (Который создаётся и записывается также в БД). После всё время берётся id пользователя с сессии, а когда сессия новая, то из куки берётся этот токен (если он есть) и по нему находится в БД id пользователя и записывается в сессию... (А токен наверное можно пересоздавать?)
Мне кажется, что этот способ небезопасный... Если украсть токен, то можно получить доступ к аккаунту пользователя.. И также с id сессии...

Как правильнее это делать, чтобы это было более менее безопасно? Возможно, всё вообще по-другому надо сделать?
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
@OnlyMyQuestion
Собственно, сессия также - подвержена данным проблемам, ее id также хранится в cookie.
В большинстве случаев - используются цифровые отпечатки. Если человек зашел из Китая, при постоянном посещении из РФ - будет подозрительно, сюда же можно отнести проверку user-agent. По сути - идеального решения не существует, ну, или я недостаточно осведомлен.
JWT - если украсть access токен, то какое-то время он будет валиден, если хранить, все в бд - смысл jwt исчезает.
OAuth - украл токен, можно использовать.
Все сводится к дополнительной верификации по косвенным параметрам.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Кратко, цепочка связей:
Аккаунт(форма авторизации/логин)->Устройство(fingerprint)->Токен(ссылка через почту)->Пользователь.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы