Что такое файл cookie?

Файл cookie — это пара ключ-значение, отправляемая сервером в заголовках при отправке ответа обратно клиенту. Клиент, просматривающий этот случай, затем сохраняет его и отправляет обратно с каждым последующим запросом на сервер.

Файлы cookie долгое время были стандартным способом отправки данных на сервер только до тех пор, пока они не были заменены другими, более совершенными способами, которыми современные браузеры будут хранить и отправлять данные, например. локальное/сеансовое хранилище, локальный корм, index-db и т. д.

Одним из самых больших недостатков использования файлов cookie для хранения данных является то, что они отправляются с каждым запросом, отправляемым на сервер, даже если сервер этого не ожидает. Это будет означать дополнительный сетевой трафик и, следовательно, увеличение задержки.

Собственный/сторонний файл cookie

Существуют различные источники, в которых файлы cookie могут быть установлены на веб-сайте, например. когда файл cookie отправляется с запросом на тот же сайт на сервер, он называется основным файлом cookie, тогда как, когда файл cookie отправляется с межсайтовым запросом, это сторонний файл cookie (тот же сайт здесь означает файл верхнего уровня). домен, такой как .io, но включает поддомен, поэтому, например, my-user.github.io — это другой сайт, чем your-user.github.io).

Атрибут того же сайта

Чтобы защитить веб-сайты от атак с межсайтовым созданием ресурсов (CSRF), такие браузеры, как Chrome и Firefox, применяют значения по умолчанию для атрибута SameSite. Это будет означать, что если вы хотите включить файлы cookie для межсайтовых запросов с вашего веб-сайта, вам нужно будет явно установить атрибут для этого.

Set-Cookie: visited=true; SameSite=Lax

Давайте посмотрим на различные параметры, доступные для этого атрибута файла cookie:

  1. Строгий — используется для ограничения использования файлов cookie в контексте одного и того же сайта.

Например, Если my-user.github.io устанавливает куки в клиенте. При доступе к маршруту, такому как images/my-photo.png, лежащему в том же поддомене, с веб-сайта, файл cookie будет отправлен с запрошенным изображением на сервер. С другой стороны, при доступе к маршруту example-github.io/images/your-photo.png из my-user.github.io файл cookie не будет отправлен с запрошенным изображением.

Из приведенного выше правила есть исключение — файл cookie с атрибутом SameSite=Strict всегда отправляет файл cookie с запросом, за исключением случаев перехода на сайт верхнего уровня по ссылке или внешнему источнику.

Например, my-user.github.io доступ по ссылке или по электронной почте не будет отправлять файл cookie с запросом на my-user.github.io/my-photo.png

2. Слабость — здесь на сцену выходит Lax. Это позволяет отправлять файлы cookie при первоначальном переходе на веб-сайт из стороннего контекста, например. ссылка или электронная почта. Это менее строгая политика в отношении одного и того же сайта, чем Secure.

По умолчанию браузеры теперь применяют политику по умолчанию для одного и того же сайта Lax для предотвращения атак CSRF. Атака CSRF может быть осуществлена ​​вредоносными веб-сайтами путем отправки недостоверных данных в файле cookie, отправленном вместе с запросом, который может сделать ваш веб-сайт уязвимым для внешних атак.

Например, если вредоносный веб-сайт пытается получить доступ к межсайтовому ресурсу /images/my-photo.png и обновляет значения файлов cookie при отправке запроса на сервер. В некоторых случаях это может быть разрушительным.

3. Нет —файл cookie отправляется с запросом на сервер независимо от того, тот же сайт или нет. Чтобы включить межсайтовые файлы cookie, для атрибута того же сайта необходимо явно установить значение None.

Вот пример, демонстрирующий это: флаг visited установлен в файле cookie user.github.io. Запрос на доступ к изображению, размещенному по адресу my-user.github.io/images/my-photo.png, отправляет файл cookie. Тот же файл cookie также отправляется с запросом example.github.io/image/my-photo.com из того же поддомена user.github.io.

Tldr;

  • В зависимости от того, с каким запрошенным ресурсом, тот же сайт или межсайтовый, отправляется файл cookie, он бывает двух типов, а именно: собственный и сторонний.
  • Чтобы ограничить пересылку файлов cookie с запросом, браузеры позволяют установить атрибут файла cookie с именем SameSite, значение которого по умолчанию равно Lax, что предотвращает отправку межсайтовых файлов cookie.
  • Чтобы включить межсайтовые файлы cookie, для атрибута SameSite необходимо установить значение None.