Sobes.tech
Middle+

Procijenite sljedeću implementaciju autentifikacije: obrazac za prijavu/lozinku, backend traži korisnika u bazi podataka (tablica: id, korisničko ime, lozinka), uzima cijeli ID i zapisuje ga u kolačić s oznakom HttpOnly. Što je loše u takvoj implementaciji i kako je možete popraviti?

sobes.tech АИ

Одговор од АИ

В описанной реализации есть несколько проблем:

  1. Хранение ID пользователя в куке напрямую — это небезопасно, так как куки можно подделать или украсть, и злоумышленник сможет получить доступ к чужому аккаунту, подставив чужой ID.

  2. Отсутствие механизма проверки подлинности куки — нет подписи или шифрования, чтобы убедиться, что кука не была изменена.

  3. Отсутствие срока жизни и защиты от повторного использования (replay attack).

  4. Только HttpOnly — хорошо, но не достаточно. Нужно использовать Secure (только по HTTPS) и SameSite, чтобы ограничить доступ к куке.

Как исправить:

  • Вместо хранения ID пользователя в куке, использовать сессионный идентификатор или JWT с подписью.
  • Если сессии на сервере, то в куке хранить только уникальный сессионный ключ, а данные пользователя хранить на сервере.
  • Если JWT, то подписывать токен секретом, чтобы нельзя было подделать.
  • Обязательно использовать флаги Secure, HttpOnly и SameSite для куки.
  • Добавить срок жизни сессии и механизм её обновления.

Пример с JWT:

// При успешной авторизации создаём JWT с ID пользователя
// и подписываем секретом

// На клиенте в куке хранится только JWT
// Сервер проверяет подпись и извлекает ID из токена

Таким образом, безопасность повышается, и риск подделки куки снижается.