Как правильно настроить cookies: не дайте красть у вас ключи
Cookies — это ключи от аккаунтов, корзин и сессий. Потерять их просто: иногда достаточно открыть сайт в кафе с бесплатным Wi-Fi. Но ещё проще — оставить ключи без надёжной связки и удивляться, почему аккаунты «отваливаются» и клиенты жалуются.
Что показала статистика
Наши сканы показали, что около 67% сайтов передают cookies без флага Secure.
Порядка 58% не выставляют HttpOnly, и почти половина игнорирует SameSite.
Это не гипотеза — это реальные цифры из тысяч проверок. Проще говоря: у большинства сайтов ключи висят на крючке в коридоре.
Почему это опасно (коротко и по существу)
Secureбез флага — cookie поедет по незашифрованному каналу в открытой сети. Перехват — как на ладони.HttpOnlyотсутствует — вредоносный JavaScript, внедрённый через XSS, спокойно читает сессию.SameSiteне настроен — атака CSRF может выполнить действие от имени пользователя (списать деньги, поменять e-mail, подписаться на новости от злоумышленника).
Реальный пример — и что мы сделали
На одном из просканированных сайтов (интернет-магазин) мы обнаружили набор уязвимых cookie:
Secure не выставлен, HttpOnly отсутствовал, SameSite был дефолтным.
Это позволило бы злоумышленнику, запустившему XSS, вывести сессии и выполнить транзакции.
Мы не эксплуатировали уязвимость; все найденные данные и подробные рекомендации были
немедленно переданы руководству сайта вместе с планом исправлений и инструкцией для хостинга.
Цель — защита, а не вред.
Что сделать прямо сейчас (практика)
Добавьте эти заголовки или директивы — это минимально и эффективно:
Set-Cookie: session=eyJ...; Path=/; Secure; HttpOnly; SameSite=Strict; Max-Age=3600;
Если у вас фреймворк — найдите место, где формируется сессия, и выставьте флаги там. Для PHP (пример):
setcookie('session', $value, [
'secure' => true,
'httponly' => true,
'samesite' => 'Strict',
'path' => '/',
'expires' => time() + 3600
]);
Частые ошибки и как их избежать
Боязнь «сломать авторизацию». Решение: тестируйте в staging и следите за логами. Современные браузеры корректно поддерживают эти флаги.
Неправильный
SameSiteдля сторонних SSO — используйтеLaxилиNoneправильно и только сSecure.Оставлять старые cookies после перехода на HTTPS — надо мигрировать: удалить старые, установить новые с
Secure.
Вывод — коротко и резонно
Cookies — не украшение, а ключи. Если вы не запираете их, вы отдаёте ключи почти даром. Настройка трёх-четырёх флагов — это 10 минут работы для разработчика и огромная разница в безопасности. Сделайте это сегодня: завтра может быть уже поздно.