Что такое куки и для чего они нужны
Что проверяют
Понимаете ли вы, как работает состояние поверх HTTP без памяти, и знаете ли атрибуты, от которых зависит безопасность. У Python-разработчика следом обычно спрашивают, как устроены сессии в Django или Flask и как защититься от CSRF.
Как отвечать
Кука это пара «имя-значение», которую сервер присылает в заголовке Set-Cookie, а браузер хранит и сам отправляет обратно в заголовке Cookie на подходящие запросы. Размер одной куки около 4 КБ. Зачем нужны: сессия и аутентификация, настройки вроде языка, аналитика и реклама.
Атрибуты, которые стоит назвать:
ExpiresилиMax-Age: без них кука сессионная и живёт до закрытия браузера;DomainиPath: на какие адреса она будет уходить;Secure: только по HTTPS;HttpOnly: недоступна изdocument.cookie, скрипт при XSS её не украдёт;SameSite:Strict,LaxилиNone. Без атрибута современные браузеры считают еёLax, аNoneпринимается только вместе сSecure.
Теперь стек. В Django response.set_cookie("theme", "dark", max_age=3600, httponly=True, samesite="Lax"), чтение через request.COOKIES, для подписи set_signed_cookie. Сессии в Django хранятся на сервере, в базе по умолчанию, а в куке лежит только sessionid. Флаги задаются в настройках: SESSION_COOKIE_HTTPONLY по умолчанию включён, а SESSION_COOKIE_SECURE выключен, и на проде его включают руками. Во Flask session устроена иначе: данные лежат в самой куке, подписанной SECRET_KEY через itsdangerous. В FastAPI response.set_cookie(...) и параметр Cookie() в обработчике.
Сторонние куки Safari и Firefox блокируют по умолчанию, поэтому на них не строят ничего важного.
Где спотыкаются
Кладут во Flask session что-то секретное, считая её зашифрованной. Она только подписана: подделать нельзя, но прочитать содержимое после base64 может любой.
Думают, что HttpOnly защищает от CSRF. Он защищает от кражи куки скриптом, а от CSRF защищают SameSite и CSRF-токен, как в CsrfViewMiddleware Django.
Ставят SameSite=None для виджета на чужом домене и забывают Secure. Браузер такую куку молча отбрасывает, и авторизация перестаёт работать без видимой ошибки.