Як правильно зробити аутентифікацію на php

Погуглити, я подивився вихідні Yii, Симфоні і PHPixie, щоб дізнатися, як аутентифікація зроблена у розумних людей

Не забувайте, що в фреймворками це все зроблено з одним розрахунком - покрити 95% можливих юзкейсов. А в зв'язку з цим реалізація трішки складніше. Так само не варто забувати, що все це "повинно" працювати на php5.4 +, а, наприклад password api з'явився тільки в 5.5, а хешування пароля це ціла наука.

Давайте розкладемо завдання на під задачі:

Нам потрібно перевірити введені користувачем даних. Це може бути пара ідентифікатор + якийсь секретний ключ (email + пароль якщо простіше), а може це просто секретний ключ (токен), або JWT токен. словом варіантів тут багато, але нам поки потрібна пара старих добрих email + пароль.

Для цього в PHP є досить проста у використанні апішка для роботи з паролями: password api. Використовуйте тільки її (або щось що її під кіптяви використовує) бо це самий безпечний і надійний спосіб роботи з паролями в PHP. Обов'язково прочитайте цей розділ документації.

У дуже простому випадку (яких більшість) вам при реєстрації потрібно просто загнати рядок в password_hash і отримати на вихід нову сходинку, яка пишеться в базу. При логін ми забираємо користувача з зазначеним email і перевіряємо введений пароль через функцію password_verify.

Після того як ми переконалися що користувач не видає себе за іншого, ми можемо створити сесію. У найпростішому випадку ми просто створюємо сесію з ID користувача і. власне все. ідентифікатор сесії буде записаний в http-only куку і все здорово. Правда при роботі з сесіями в PHP потрібно пам'ятати про CSRF атаки, від яких потрібно захищатися (що вміють практично все фреймворки з коробки).

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

Схожі статті