Какие существуют ограничения у HTTP cookie?

«Какие существуют ограничения у HTTP cookie?» — вопрос из категории Безопасность, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Да, у HTTP-кук (cookies) есть несколько важных технических и безопасностных ограничений.

Основные технические ограничения:

  • Размер: Обычно 4 КБ на одну куку (включая имя, значение и атрибуты). Это ограничение браузеров, а не стандарта.
  • Количество на домен: Большинство браузеров ограничивает количество кук для одного домена примерно 50-150. Точное число зависит от браузера.
  • Общий лимит на браузер: Существует общее ограничение на все куки (часто около 3000). При превышении старые куки могут удаляться.

Ограничения, связанные с безопасностью и доменом:

  • Domain и Path: Кука привязывается к конкретному домену и пути. Она будет отправляться только на соответствующие запросы.
    Set-Cookie: sessionId=abc123; Domain=.example.com; Path=/
  • HttpOnly: Флаг HttpOnly запрещает доступ к куке через JavaScript (document.cookie), что защищает от XSS-атак.
  • Secure: Флаг Secure разрешает отправку куки только по защищённому протоколу HTTPS.
  • SameSite: Атрибут SameSite контролирует, будет ли кука отправляться с кросс-сайтовыми запросами. Это основная защита от CSRF-атак.
    • Strict: Кука никогда не отправляется с кросс-сайтовых запросов.
    • Lax: (Значение по умолчанию в современных браузерах) Кука отправляется с безопасными кросс-сайтовыми запросами (например, переход по ссылке).
    • None: Кука отправляется со всеми запросами (требует Secure).

Пример установки безопасной куки на сервере (C# ASP.NET Core):

Response.Cookies.Append(
    "AuthToken",
    "encrypted-value-here",
    new CookieOptions
    {
        HttpOnly = true,     // Защита от XSS
        Secure = true,       // Только по HTTPS
        SameSite = SameSiteMode.Strict, // Защита от CSRF
        Expires = DateTimeOffset.UtcNow.AddHours(1),
        // Domain и Path задаются при необходимости
    });

Вывод: При работе с куками необходимо учитывать их ограничения по размеру и количеству, а также всегда устанавливать флаги безопасности (HttpOnly, Secure, SameSite) для защиты пользовательских данных.