Что такое куки и зачем они нужны
Что проверяют
Знаете ли вы атрибуты и понимаете ли, какие из них отвечают за безопасность.
Как отвечать
Куки это небольшие данные, которые сервер просит браузер сохранить, а браузер автоматически отправляет обратно при каждом запросе к этому домену. Механизм появился потому, что HTTP не хранит состояние, а отличать одного пользователя от другого как-то надо.
Основное применение: идентификатор сессии, признак авторизации, настройки интерфейса, аналитика.
Атрибуты, и именно они составляют содержание ответа:
- срок жизни: без него кука сеансовая и исчезает с закрытием браузера;
- домен и путь: определяют, куда кука будет отправляться;
- только по защищённому соединению: не даёт отправить куку по незашифрованному каналу;
- недоступность из скриптов: браузер не даёт прочитать куку из кода страницы. Это защита от кражи через внедрённый скрипт, и для сессионной куки атрибут обязателен;
- правило межсайтовой отправки: определяет, отправлять ли куку при переходах с чужих сайтов. Строгое значение не отправляет вовсе, промежуточное отправляет только при обычных переходах, свободное отправляет всегда и требует защищённого соединения. Это основная защита от подделки межсайтовых запросов.
Ограничения: около четырёх килобайт на куку и ограниченное число на домен. Важное следствие: куки уходят с каждым запросом, включая картинки и скрипты, поэтому большой объём напрямую замедляет сайт.
Сравнение с локальным хранилищем: оно вместительнее и не отправляется автоматически, но доступно скриптам, поэтому для токенов небезопасно.
Что проверять тестировщику: наличие защитных атрибутов у сессионной куки, поведение после истечения срока, изоляция между пользователями, очистка при выходе из системы.
Где спотыкаются
Хранят токен в локальном хранилище вместо защищённой куки.
Не ставят атрибут недоступности из скриптов.
Не задают правило межсайтовой отправки и остаются уязвимы к подделке запросов.
Кладут в куки много данных, замедляя каждый запрос.