Что такое cookie? Как сайты запоминают вас
Cookie — это небольшой фрагмент текста, который сайт просит ваш браузер сохранить, а затем отправлять обратно при каждом последующем визите на этот сайт. Так сайт «запоминает» вас: что вы вошли в аккаунт, что лежит в корзине, какой язык вы выбрали. Cookie — это просто данные, а не программы, но поскольку они могут идентифицировать вас, они важны и для безопасности, и для приватности.
Почему это важно, когда вы создаёте с помощью ИИ
Cookie лежат в основе нескольких функций, которые вы будете просить у ИИ-конструктора, часто даже не упоминая слово «cookie»:
- Вход. В большинстве веб-приложений «оставаться в системе» означает session cookie. То, как он настроен, определяет, насколько легко его украсть.
- Корзины и настройки. Корзина, которая переживает обновление страницы, часто опирается на cookie или на хранилище браузера.
- Аналитика и реклама. Добавление Google Analytics, пикселя Meta или виджета чата обычно добавляет cookie от других компаний.
- Юридические уведомления. Во многих странах некоторые cookie требуют сначала согласия посетителя, отсюда и появились баннеры с cookie.
Если вы знаете, какие cookie устанавливает ваше приложение и зачем, вы сможете лучше выбирать настройки безопасности, согласие и политику конфиденциальности.
Бытовая аналогия
Представьте номерок в гардеробе. Вы сдаёте пальто и получаете номерок с цифрой. Сам номерок не содержит пальто — только цифру. Каждый раз, когда вы возвращаетесь к стойке, вы показываете номерок, и гардеробщик знает, какое пальто ваше.
Session cookie работает так же. Когда вы входите, сервер хранит ваши данные у себя и отдаёт вашему браузеру номерок — длинный случайный ID. Браузер показывает этот номерок с каждым запросом, а сервер по нему понимает, кто вы. Тот, кто скопирует номерок, может забрать пальто, поэтому cookie входа нужно защищать.
Как на самом деле работает cookie
- Вы заходите на сайт. В ответе сервера есть заголовок вида
Set-Cookie: session_id=8f3k...; HttpOnly; Secure; SameSite=Lax. - Ваш браузер сохраняет его, привязав к домену сайта.
- При каждом последующем запросе к тому же сайту браузер автоматически добавляет
Cookie: session_id=8f3k.... - Сервер читает его и понимает, что это вы.
JavaScript страницы тоже может создавать cookie, но самые важные из них — сессии входа — должны устанавливаться сервером и быть скрыты от JavaScript.
Виды cookie
| Вид | Что это значит | Пример |
|---|---|---|
| Сессионный cookie | Без срока действия; удаляется при закрытии сеанса браузера | Короткий шаг оформления заказа |
| Постоянный cookie | Имеет срок действия (Expires или Max-Age) и переживает перезапуск | «Запомнить меня на 30 дней» |
| Собственный | Устанавливается сайтом, открытым в адресной строке | Ваш вход на этом сайте |
| Сторонний | Устанавливается другим доменом, встроенным в страницу | Идентификатор трекинга рекламной сети |
| Строго необходимый | Нужен для сервиса, который запросил пользователь | Сессия входа, корзина покупок |
| Необязательный | Полезен владельцу сайта, но не обязателен | Аналитика, реклама, A/B-тесты |
Браузеры постепенно ограничивали сторонние cookie, потому что их используют для отслеживания людей между сайтами. Несколько крупных браузеров теперь блокируют многие из них по умолчанию, а детали постоянно меняются, поэтому не строите ничего важного на сторонних cookie.
Пример: небольшой интернет-магазин
Допустим, вы создали магазин, который продаёт свечи ручной работы. Вот какие cookie разумная версия устанавливала бы и почему.
session — устанавливается, когда владелец или покупатель входит в аккаунт. Он содержит только случайный ID; реальные данные сессии хранит сервер. Настройки: HttpOnly (скрипты страницы не могут его читать), Secure (отправляется только по HTTPS), SameSite=Lax (не отправляется в большинстве запросов, инициированных другими сайтами). Строго необходимый.
cart_id — позволяет посетителю, который не вошёл в аккаунт, сохранить свою корзину. Он указывает на корзину, сохранённую в базе данных. Строго необходимый, потому что посетитель сам попросил добавлять товары в корзину.
theme — запоминает тёмную тему. Это могло бы быть cookie, но ему не нужно доходить до сервера, поэтому проще localStorage браузера.
Cookie аналитики — добавляются, если вы установите инструмент аналитики. Они необязательные. В ЕС и Великобритании для них обычно требуется согласие до установки, поэтому скрипт аналитики должен ждать, пока посетитель не нажмёт «Принять».
Обратите внимание, что магазин не хранит в cookie: имя покупателя, адрес или данные карты. Cookie передаются с каждым запросом и живут на устройстве пользователя, поэтому в них должны быть ID, а не персональные данные.
Общие термины
| Термин | Что это значит |
|---|---|
| Cookie | Небольшая пара «имя–значение», которую браузер сохраняет и отправляет обратно на сайт. |
Set-Cookie | Заголовок ответа, с помощью которого сервер создаёт или обновляет cookie. |
| Сессия | Запись сервера о вошедшем пользователе, связанная с ID в cookie. |
HttpOnly | Не позволяет JavaScript страницы читать cookie, что ограничивает ущерб от внедрённых скриптов. |
Secure | Cookie отправляется только по зашифрованным соединениям HTTPS. |
SameSite | Определяет, отправляется ли cookie в запросах с других сайтов (Strict, Lax или None). |
Expires / Max-Age | Когда cookie должен быть удалён. |
| Domain / Path | Какие адреса сайта получают cookie. |
| localStorage | Хранилище браузера, которое может читать код страницы, но которое автоматически не отправляется на сервер. |
| XSS | Межсайтовый скриптинг: скрипт злоумышленника, выполняющийся на вашей странице, который может пытаться украсть данные. |
| CSRF | Межсайтовая подделка запроса: другой сайт обманом заставляет браузер отправить запрос с вашими cookie. |
| Согласие на cookie | Запрос разрешения посетителей перед установкой необязательных cookie. |
Частые ошибки и заблуждения
- «Cookie — это вирусы». Это простой текст. Они не могут выполнять код на вашем компьютере.
- Хранение чувствительных данных в cookie. Храните случайный ID, а данные держите на сервере.
- Токены входа в localStorage. Любой скрипт на странице может читать localStorage, включая внедрённый. Cookie с
HttpOnlyвообще не могут читать скрипты страницы. - Отсутствие
SecureиHttpOnly. Эти два флага дешёвые и закрывают распространённые уязвимости. - Предположение, что баннер покрывает всё. Баннер, который загружает аналитику до того, как кто-либо нажмёт «Принять», не выполняет свою задачу.
- Забытый выход из системы. При выходе нужно удалить cookie и завершить сессию на сервере, чтобы скопированный cookie перестал работать.
- «Если я не использую cookie, правила приватности не применяются». Такие правила, как GDPR, касаются персональных данных где бы они ни хранились — включая локальное хранилище, отпечатки устройств и серверные логи.
Что спросить у вашего ИИ-конструктора
- «Составь список всех cookie, которые устанавливает приложение: для чего каждый, как долго действует и строго ли он необходим».
- «Для сессии входа используй cookie с
HttpOnly,Secure,SameSite=Lax. Не клади токены авторизации в localStorage». - «В cookie храни только случайный ID сессии; данные сессии держи на сервере».
- «При выходе очищай cookie и аннулируй сессию на сервере».
- «Не загружай скрипты аналитики и маркетинга, пока посетитель их не принял, и запоминай его выбор».
- «Добавь в политику конфиденциальности простой раздел о cookie, который соответствует списку выше».
По части согласия смотрите как добавить согласие на cookie. Чтобы понять, как cookie связаны со входом, прочитайте что такое аутентификация.
Cookie в Mythex
Mythex не предоставляет встроенного входа для пользователей вашего приложения, поэтому cookie вашего приложения берутся из его собственного кода и инструментов, которые вы в него добавляете, например session cookie от выбранного вами подхода к аутентификации. Попросите агента в чате перечислить их, ужесточить их настройки или добавить баннер согласия, и проверьте результат в живом превью перед публикацией. Хорошей стартовой формулировкой будет рецепт документации как добавить вход в приложение, а безопасность приложений, которые вы создаёте объясняет, как держать ключи и секреты вне браузера.
Вопросы
Что такое cookie на сайте?
Cookie — это небольшой фрагмент текста, который сайт просит ваш браузер сохранить. Браузер отправляет его обратно с каждым последующим запросом к этому сайту, что позволяет сайту запоминать, например, вошли ли вы в аккаунт или что лежит в корзине.
Опасны ли cookie?
Cookie — это просто данные, а не программы, поэтому они не могут выполнять код или заразить компьютер. Поводы для беспокойства — приватность, когда сторонние cookie отслеживают вас на разных сайтах, и безопасность, когда cookie входа крадут и используют, чтобы выдать себя за вас.
В чём разница между собственными и сторонними cookie?
Собственный cookie устанавливает сайт, который открыт в адресной строке, например cookie входа. Сторонний cookie устанавливает другой домен, встроенный в страницу, например рекламная сеть, и его часто используют, чтобы следить за вами на многих сайтах.
Нужен ли баннер с cookie?
Это зависит от того, где находятся ваши пользователи и какие cookie вы используете. В ЕС и Великобритании необязательные cookie, такие как аналитика или реклама, обычно требуют сначала согласия, тогда как cookie, строго необходимые для работы сервиса, например сессия входа, обычно не требуют. Проверьте правила, которые действуют для вас.
В чём разница между cookie и localStorage?
Оба хранят данные в браузере. Cookie автоматически отправляются на сервер с каждым запросом, что подходит для входов. localStorage остаётся в браузере и читается только кодом самой страницы, что подходит для настроек, например темы оформления.