«Запам'ятати мене» - користувач лишається автентифікованим тижні й місяці, навіть після закриття браузера, коли звичайна сесія вже завершилася.
Як це роблять правильно:
- окремий довгоживучий токен у cookie - випадковий, криптографічно стійкий, а не email, id чи хеш пароля;
- у базі - хеш токена (чи токен, прив'язаний до користувача, як у Laravel -
remember_token), щоб витік бази не давав готових cookie; - cookie з
HttpOnly,Secure,SameSite- недоступна JavaScript і не передається по HTTP; - при використанні токен створює нову звичайну сесію;
- при виході токен знищується на сервері, а не лише стирається cookie в браузері.
Ризики довгих сесій і що з ними робити:
- викрадена cookie діє довго. Обмежити абсолютний термін (наприклад, 30 днів), а для чутливих дій вимагати повторного підтвердження паролем (зміна email, пароля, MFA, платіжних даних) - так працює
password.confirmmiddleware в Laravel; - вихід «з усіх пристроїв» має справді анулювати remember-токени. У Laravel зміна
remember_token(наприклад, при зміні пароля чиAuth::logoutOtherDevices()) робить старі cookie недійсними; - «ротація» токена при кожному використанні з виявленням повторного використання - так помічають, що cookie скопійовано;
- список активних сесій у налаштуваннях облікового запису з пристроєм, місцем і часом останньої активності - користувач бачить чужий вхід і може його завершити (драйвер сесій
databaseдає таку можливість).
Таймаути сесій (рекомендації OWASP):
- неактивність - сесія завершується після N хвилин без дій (для банківських застосунків - хвилини, для звичайних сайтів - години);
- абсолютний - навіть активна сесія закінчується після певного часу;
- для адмінок і фінансових операцій - коротші терміни, ніж для звичайних користувачів.
Регенерація ідентифікатора сесії після входу, зміни прав і виходу - захист від фіксації сесії ($request->session()->regenerate()).
Компроміс: «Запам'ятати мене» - зручність коштом безпеки. Для публічних і спільних комп'ютерів його не варто вмикати за замовчуванням; для застосунків з чутливими даними варто обмежити або вимагати MFA при відновленні сесії з remember-токена.