Sobes.tech
Middle+

Avalie a seguinte implementação de autenticação: formulário de login/senha, o backend procura o usuário na base de dados (tabela: id, nome de usuário, senha), obtém o ID inteiro e grava-o num cookie com a flag HttpOnly. O que há de errado nesta implementação e como corrigi-la?

sobes.tech IA

Resposta da IA

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

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

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

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

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

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

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

Пример с JWT:

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

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

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