Налаштування в config/session.php (і змінні SESSION_* у .env) безпосередньо визначають, наскільки легко викрасти чи підробити сесію.
Атрибути cookie:
| Параметр | Безпечне значення | Навіщо |
|---|---|---|
secure (SESSION_SECURE_COOKIE) |
true на продакшені |
cookie лише через HTTPS |
http_only |
true (за замовчуванням) |
недоступна JavaScript - XSS не вкраде сесію |
same_site |
lax (за замовчуванням) чи strict |
не надсилається в міжсайтових POST - захист від CSRF |
domain |
null чи конкретний домен |
cookie для .example.com бачать усі піддомени, включно з тими, що можуть бути скомпрометовані |
partitioned |
для вбудованих сторінок у сторонніх сайтах | CHIPS - окреме сховище для кожного сайту-власника |
SESSION_SECURE_COOKIE за замовчуванням не задано - Laravel не виставляє Secure, доки ви не ввімкнете. На продакшені з HTTPS - обов'язково true.
Драйвер сесій:
database,redis- дані на сервері, у cookie лише ідентифікатор. Можна переглянути й завершити сесії користувача («вийти з усіх пристроїв»);cookie- усі дані сесії в зашифрованій cookie. Неможливо примусово завершити сесію на сервері, розмір обмежений, а витікAPP_KEYдає підробку сесій;file- на кількох серверах не працює без спільного сховища.
encrypt (SESSION_ENCRYPT) - шифрувати дані сесії у сховищі. Корисно, якщо в сесії бувають чутливі дані, а доступ до Redis чи таблиці сесій мають інші системи.
Терміни:
lifetime- хвилини неактивності до завершення сесії (за замовчуванням 120);expire_on_close- сесія закінчується при закритті браузера;- для адмінок і фінансових застосунків - коротші терміни й повторне підтвердження пароля для чутливих дій.
Регенерація ідентифікатора:
- після входу -
$request->session()->regenerate()(стандартні контролери автентифікації роблять це) - захист від фіксації сесії; - при виході -
invalidate()іregenerateToken().
Що ще перевірити:
- окремі назви cookie (
SESSION_COOKIE) для різних застосунків на одному домені - інакше вони перезаписують сесії одне одного; SameSite=None(потрібна для вбудовування в iframe на інших сайтах) - лише зSecureі з усвідомленням, що захист від CSRF тепер повністю на токенах;- таблиця сесій містить IP і user agent - персональні дані з відповідним терміном зберігання.