предисловие
В версии Chrome 80, выпущенной в феврале, сторонние файлы cookie были заблокированы по умолчанию.В период оттенков серого у многих приложений системы Ali были проблемы.По этой причине была создана специальная группа для содействия преобразованию каждого BU. В настоящее время Али Система в основном была переделана. Подсчитано, что все фронтенд-команды получили уведомления, и это действительно углубило всеобщее понимание файлов cookie, поэтому весьма вероятно, что об этом будет задан вопрос на собеседовании, и даже если это не вопрос на собеседовании, при задании о контенте, связанном с HTTP, вы могли бы также поговорить об этом.Когда дело доходит до этого вопроса, во-первых, он может показывать ваши последующие действия по текущим событиям в интерфейсе, а во-вторых, он также может быть расширен на контент фронта -Конечная безопасность, что добавит очков вашему собеседованию.
Эта статья познакомит вас с файлами cookie браузера и этим «горячим» атрибутом SameSite.
HTTP
Обычно мы говорим, что «HTTP — это протокол без сохранения состояния», но следует отметить, что HTTP здесь фактически относится к HTTP 1.x и так называемому протоколу без сохранения состояния, простое понимание состоит в том, что даже если один и тот же клиент отправляет запросы на сервер два раза подряд, сервер не распознает, что это запрос, отправленный одним и тем же клиентом, что приводит к таким проблемам, как добавление товара в корзину, но поскольку он не может распознать одного и того же клиента, вы обновляете страницу и оно исчезнет. ...
Cookie
Чтобы решить проблему, вызванную безгражданством HTTP, позже появились файлы cookie. Однако это может привести к некоторым недоразумениям.Во-первых, безгражданство – это не плохо, у него есть преимущества, но могут быть и некоторые проблемы. Существование файлов cookie не для решения проблемы протокола связи без сохранения состояния, а для решения проблемы состояния сеанса между клиентом и сервером.Это состояние относится к состоянию серверной службы, а не к состоянию протокола связи.
Введение в файлы cookie
Тогда давайте взглянем на куки со ссылкой на Википедию:
Файлы cookie (множественное число файлов cookie), тип «небольшой текстовый файл», относится к данным, сохраняемым на локальном терминале пользователя некоторыми веб-сайтами для идентификации личности пользователя.
Как часть небольших текстовых данных, размер которых обычно не превышает 4 КБ, он состоит из имени (Name), значения (Value) и нескольких других необязательных атрибутов, используемых для управления сроком действия, безопасностью и областью использования файлов cookie. быть введены позже.
Просмотр файлов cookie
Мы можем просмотреть файлы cookie текущей страницы в инструментах разработчика браузера:
Хотя мы видим файлы cookie в нашем браузере, это не означает, что файл cookie хранится только в браузере. Фактически, содержимое, связанное с файлами cookie, также может храниться в локальных файлах, таких как Chrome на Mac, а каталог хранения~/Library/Application Support/Google/Chrome/Default
, будет файл базы данных с именем Cookies, вы можете открыть его с помощью программного обеспечения sqlite:
Преимущество локального хранения заключается в том, что файлы cookie могут по-прежнему действовать, даже если вы закроете браузер.
Настройки файлов cookie
Как устанавливается файл cookie? Проще говоря
- Клиент отправляет HTTP-запрос на сервер
- Когда сервер получает HTTP-запрос, добавьте поле Set-Cookie в заголовок ответа.
- Браузер сохраняет куки после получения ответа
- После этого информация о файлах cookie отправляется на сервер через поле Cookie в каждом запросе к серверу.
мы начинаем сhttps://main.m.taobao.com/
Возьмем этот процесс в качестве примера:
Мы можем видеть поле Set-Cookie в заголовках ответа, возвращаемых запросом:
Затем смотрим на куки:
Обновим страницу и снова посмотрим на запрос, вы можете увидеть поле cookie в заголовках запроса:
Свойства файлов cookie
На рисунке ниже мы можем видеть некоторые свойства, связанные с файлами cookie:
Вот несколько моментов, которые вы могли не заметить:
Name/Value
При работе с файлами cookie с помощью JavaScript обратите внимание на кодировку значения.
Expires
Expires используется для установки времени истечения срока действия файла cookie. Например:
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
Когда атрибут Expires установлен по умолчанию, это означает файл cookie сеанса.Как показано на рисунке выше, значением Expires является Session, что означает файл cookie сеанса. В сеансовом файле cookie значение сохраняется в памяти клиента и истекает, когда пользователь закрывает браузер. Следует отметить, что в некоторых браузерах предусмотрена функция восстановления сеанса, в этом случае, даже если браузер будет закрыт, файл cookie сеанса будет сохранен, как если бы браузер никогда не закрывался.
В отличие от сеансовых файлов cookie, постоянные файлы cookie хранятся на жестком диске пользователя до истечения срока их действия или пока файл cookie не будет очищен. Здесь стоит отметить, что установленные дата и время относятся только к клиенту, а не к серверу.
Max-Age
Max-Age используется для установки количества секунд, которые должны пройти до истечения срока действия файла cookie. Например:
Set-Cookie: id=a3fWa; Max-Age=604800;
Max-Age может быть положительным, отрицательным или даже 0.
Если атрибут max-Age положительный, браузер сохранит его, то есть запишет в соответствующий файл cookie.
Когда атрибут max-Age имеет отрицательное значение, это означает, что файл cookie является только файлом cookie сеанса.
Когда max-Age равен 0, файл cookie будет немедленно удален.
Если существуют и Expires, и Max-Age, Max-Age имеет приоритет.
Domain
Домен указывает имя хоста, на который могут быть отправлены файлы cookie. Если не указано, по умолчанию используется хост-часть текущего адреса доступа к документу (но не субдомен).
Например, на домашней странице Taobao установлен домен .taobao.com, поэтому как a.taobao.com, так и b.taobao.com могут использовать файлы cookie.
Здесь следует отметить, что файлы cookie не могут быть установлены между доменами.Например, установка домена на Baidu на странице под доменным именем Ali недействительна:
Set-Cookie: qwerty=219ffwef9w0f; Domain=baidu.com; Path=/; Expires=Wed, 30 Aug 2020 00:00:00 GMT
Path
Путь указывает URL-адрес, который должен появиться в пути к запрошенному ресурсу, прежде чем можно будет отправить заголовок Cookie. например, установкаPath=/docs
,/docs/Web/
Ресурсы ниже будут иметь заголовок Cookie,/test
Заголовок Cookie не переносится.
Идентификаторы домена и пути вместе определяют область действия файла cookie: то есть, на какие URL-адреса должен быть отправлен файл cookie.
Безопасное имущество
Файлы cookie, помеченные как безопасные, должны отправляться на сервер только через запросы, зашифрованные протоколом HTTPS. Используя протокол безопасности HTTPS, файлы cookie можно защитить от кражи и подделки в процессе передачи между браузером и веб-сервером.
HTTPOnly
Установка атрибута HTTPOnly предотвращает доступ скриптов на стороне клиента к файлам cookie через document.cookie и т. д., помогая избежать XSS-атак.
SameSite
В последнее время стоит упомянуть SameSite, потому что версия Chrome80, выпущенная в феврале, по умолчанию заблокировала сторонние файлы cookie, что может вызвать проблемы во многих приложениях Alibaba.
эффект
Давайте посмотрим, что делает это свойство:
Атрибут SameSite предотвращает атаки с подделкой межсайтовых запросов (CSRF), предотвращая отправку файлов cookie во время межсайтовых запросов.
значение атрибута
SameSite может иметь следующие три значения:
- StrictТолько запрос одной стороны может содержать файлы cookie, то есть браузер будет отправлять файлы cookie, запрошенные одним и тем же сайтом, то есть текущий URL-адрес веб-страницы точно совпадает с целевым URL-адресом запроса.
- LaxРазрешить некоторым сторонним запросам хранить файлы cookie
- NoneФайлы cookie отправляются вне зависимости от того, межсайтовые они или нет.
Значение по умолчанию — «Нет» до, а значение по умолчанию — «Слабое» после Chrome 80.
Междоменные и межсайтовые
Первое, что нужно понять, это то, что межсайтовый и междоменный — это разные вещи. Тот же сайт/межсайтовый" и собственный/сторонний эквивалентны. Но «одно и то же происхождение/кросс-происхождение» в браузерной политике одинакового происхождения (SOP) — это совершенно другое понятие.
Политика одинакового происхождения означает, что протокол/имя хоста/порт двух URL-адресов одинаковы. Например,www.taobao.com/pages/…, это…https, имя хостаwww.taobao.com, порт443.
Политика одного и того же происхождения является краеугольным камнем безопасности браузера, и ее суждение об «одном и том же происхождении» является относительно строгим. URL-адреса одинаковы, нет необходимости учитывать протокол и порт. Среди них eTLD представляет собой действующее доменное имя верхнего уровня, которое зарегистрировано в списке общедоступных суффиксов (списке общедоступных суффиксов), поддерживаемом Mozilla, например .com, .co.uk, .github.io и т. д. eTLD+1 означает действительное доменное имя верхнего уровня + доменное имя второго уровня, например taobao.com и т. д.
Чтобы привести несколько примеров,www.taobao.comиwww.baidu.comявляется межсайтовым, www.a.taobao.com иwww.b.taobao.comЭто один и тот же сайт, a.github.io и b.github.io — межсайтовые (обратите внимание, что это межсайтовые).
Изменять
Далее давайте посмотрим, как изменение с None на Lax влияет на отправку файлов cookie? Непосредственно на схему:
Как видно из приведенного выше рисунка, для большинства веб-приложений четыре случая формы сообщения, iframe, AJAX и изображения изменились с отправки сторонних файлов cookie между сайтами на их отсутствие.
Почтовая форма: Да, изучение CSRF всегда даст примеры форм.
iframe: многие веб-приложения, встроенные в iframe, являются межсайтовыми и будут затронуты.
AJAX: может повлиять на поведение и результаты некоторых внешних значений.
Изображение: изображения обычно размещаются на CDN. В большинстве случаев файлы cookie не требуются, поэтому влияние ограничено. Однако на это может повлиять ссылка на изображение, требующее аутентификации.
Помимо этих методов, есть еще методы-скрипты, которые тоже не отправляют куки, например, большинство запросов Taobao — это jsonp, что также может быть затронуто, если задействован кросс-сайт.
проблема
Давайте посмотрим, в чем проблема? Приведу несколько примеров:
-
Страницы Tmall и Fliggy получают данные для входа, запрашивая интерфейс под доменным именем Taobao.Поскольку файл cookie утерян, пользователь не может войти в систему, и страница ошибочно оценит, что пользователь включил функцию «запретить сторонние файлы cookie». браузера с неправильными подсказками
-
На некоторых страницах Taobao встроены страницы подтверждения оплаты и подтверждения оплаты Alipay, встроенная страница входа Taobao Tmall и т. д. Из-за недействительного файла cookie оплата, вход и другие операции завершатся сбоем.
-
В iframe также встроена реклама Alimama на крупных веб-сайтах, таких как Toutiao, NetEase, Weibo и др. Без файлов cookie невозможно дать точные рекомендации.
-
Некоторые системы отслеживания скрывают информацию об идентификаторе пользователя в файлах cookie для отчетов журнала. Такие системы обычно используют отдельное доменное имя, которое отделено от имени бизнес-домена, поэтому оно также будет затронуто.
-
Некоторые системы, используемые для предотвращения злонамеренных запросов, выводят всплывающий код подтверждения для пользователей, которые считаются злонамеренными запросами проверки безопасности. После проверки безопасности в домене, где был сделан запрос, будет установлен файл cookie. Коды подтверждения безопасности больше не нужны. В Chrome 80 и более поздних версиях, если запрос не может передать этот файл cookie из-за Samesite, всегда будет появляться код подтверждения для проверки безопасности.
-
Бэкенд мерчанта Tmall запросил междоменный интерфейс, так как куки нет, интерфейс не будет возвращать данные
-
...
Если проблема не будет решена, затронуто еще много систем...
решать
Решение состоит в том, чтобы установить для SameSite значение none.
Возьмем в качестве примера веб-сайт Adobe:www.adobe.com/sea/, просмотрите запрос, чтобы увидеть:
Однако следует отметить две вещи:
- Интерфейс HTTP не поддерживает SameSite=none
Если вы хотите добавить атрибут SameSite=none, то файл cookie также должен добавить атрибут Secure, указывающий, что файл cookie будет отправляться только по протоколу HTTPS.
- Требуется обнаружение UA, некоторые браузеры не могут добавить SameSite=none
Safari для IOS 12 и некоторые старые версии Chrome распознают SameSite=none как SameSite=Strict, поэтому сервер должен выполнять обнаружение User-Agent при отправке заголовка ответа Set-Cookie и не отправлять этим браузерам атрибут SameSite=none.
Роль файлов cookie
Файлы cookie в основном используются для следующих трех аспектов:
- Управление состоянием сеанса (например, статус входа пользователя, корзина покупок, счет игры или другая информация, которую необходимо записать)
- Настройки персонализации (такие как пользовательские настройки, темы и т. д.)
- Отслеживание поведения в браузере (например, отслеживание и анализ поведения пользователей и т. д.)
Недостатки файлов cookie
Если спросят, ответьте с точки зрения размера, безопасности, увеличения размера запроса и т. д.
Ссылаться на
- MDN
- HTTP — это протокол без сохранения состояния. Что значит без гражданства в этом предложении? - Ответ Линцзянь - Зная
- В Chrome 80.0 для параметра SameSite по умолчанию установлено значение Lax, как это повлияет на существующее использование файлов cookie? — Ответ Цзы Юнфэй — Зная
- некоторые внутренние статьи
Различные серии
Адрес каталога различных серий статей:GitHub.com/ в настоящее время имеет бриз…
Если есть какие-либо ошибки или неточности, пожалуйста, поправьте меня, большое спасибо. Если вам нравится или у вас есть вдохновение, добро пожаловать в звезду, что также является поощрением для автора.