Cookie — це невеликий фрагмент тексту, який сервер просить браузер зберегти й надсилати назад із кожним наступним запитом до того самого сайту. Саме на цьому механізмі досі тримається більшість систем автентифікації в вебі.
Як cookie передаються
Сервер встановлює cookie за допомогою заголовка відповіді Set-Cookie. Після цього браузер автоматично додає заголовок Cookie з відповідним значенням до кожного наступного запиту на той самий домен — доти, доки cookie не закінчиться термін дії або її не видалять.
Атрибут Secure
Атрибут Secure дозволяє браузеру надсилати cookie лише через захищене HTTPS-з'єднання. Без цього атрибута cookie може бути передана відкритим текстом по HTTP, що робить її вразливою до перехоплення в незахищених мережах.
Атрибут HttpOnly
Cookie з атрибутом HttpOnly недоступна для читання через JavaScript у браузері (document.cookie). Це критично важливий захист від XSS-атак: навіть якщо зловмиснику вдасться впровадити шкідливий скрипт на сторінку, він не зможе вкрасти сесійну cookie з таким атрибутом.
Атрибут SameSite
Атрибут SameSite обмежує, чи надсилається cookie при переходах з інших сайтів, і є основним захистом від CSRF-атак. Значення Strict блокує міжсайтове надсилання повністю, Lax дозволяє в обмежених випадках (наприклад, при переході за посиланням), а None знімає обмеження (і вимагає атрибута Secure).
Навіщо це потрібно
- Налаштувати безпечну сесійну cookie для власного вебзастосунку.
- Діагностувати, чому cookie не зберігається чи не надсилається браузером у певних сценаріях.
- Перевірити конфігурацію cookie стороннього сайту на предмет базових практик безпеки.
Атрибут Partitioned і майбутнє без сторонніх cookie
Атрибут Partitioned (частина ініціативи CHIPS) дозволяє сайту, вбудованому в iframe на чужій сторінці, мати окрему версію cookie для кожного батьківського сайту замість однієї спільної. Це компроміс між повним блокуванням сторонніх cookie (що ламає легітимні вбудовані віджети на кшталт чатів чи платіжних форм) і старою моделлю, де сторонні cookie могли відстежувати користувача між усіма сайтами, де він з'являється.