Какие основные атрибуты куки и за что они отвечают?
Что проверяют
Знаете ли вы атрибуты Set-Cookie настолько, чтобы проверить их как тестировщик: где смотреть, какое значение правильное и какие тест-кейсы из этого следуют. Следом спрашивают, как проверить, что сессионную куку нельзя украсть через XSS или отправить с чужого сайта.
Как отвечать
Пройдитесь по атрибутам, сразу с тем, что проверять:
Name=Value: сама пара. Лимит около 4 КБ на куку, идентификатор сессии непредсказуем и меняется после входа;Domain: без него кука host-only и уходит только на тот же хост. С ним кука уходит и на все поддомены, это отдельный кейс;Path: пути, для которых кука отправляется. По умолчанию это каталог текущего URL, а не корень: кука с/account/loginне уйдёт на/api;ExpiresиMax-Age: без них кука сессионная и живёт до закрытия браузера. Если заданы оба, побеждаетMax-Age, удаляют куку черезMax-Age=0. Chrome ограничивает срок жизни 400 днями;Secure: только HTTPS;HttpOnly: кука недоступна изdocument.cookie, это защита сессии от кражи через XSS;SameSite:Strictне отправляет куку при переходе с других сайтов,Laxотправляет только при навигации верхнего уровня методом GET,Noneотправляет всегда и требуетSecure. Без атрибута Chrome ведёт себя как приLax;Partitioned: кука стороннего сервиса хранится отдельно для каждого сайта верхнего уровня (CHIPS).
Добавьте префиксы: __Host- требует Secure, Path=/ и запрещает Domain, __Secure- требует Secure.
Где смотреть: вкладка Application в DevTools, заголовки ответа во вкладке Network, Postman или Burp Suite для подмены.
Где спотыкаются
Говорят, что без Path кука доступна только в корне. Наоборот, по умолчанию берётся каталог текущей страницы.
Путают HttpOnly и Secure: первый защищает от чтения скриптом, второй от передачи по открытому HTTP.
Проверяют наличие атрибутов, но не поведение: не повторяют запрос со старой кукой после выхода из аккаунта и не смотрят, меняется ли идентификатор сессии после входа.