Network Working Group K. Moore
Request for Comments: 2964 University of Tennessee
BCP: 44 N. Freed
Категория: Лучшая современная практика Innosoft
Октябрь 2000
Использование управления состоянием HTTP
Статус этого меморандума
Этот документ определяет Лучшую современную практику Интернета для
интернет-сообщества и запрашивает обсуждение и предложения по
улучшениям. Распространение этого меморандума не ограничено.
Уведомление об авторских правах
Copyright (C) The Internet Society (2000). Все права защищены.
Примечание IESG
IESG отмечает, что этот механизм внутренне использует домен верхнего
уровня (TLD) .local при обработке имён хостов, не содержащих точек, и
что этот механизм может работать не ожидаемым образом, если когда-либо
будет зарегистрирован фактический TLD .local.
Аннотация
Механизмы, описанные в «HTTP State Management Mechanism» (RFC-
2965), и его предшественнике (RFC-2109), могут использоваться для
множества различных целей. Однако некоторые текущие и потенциальные
применения протокола вызывают споры, поскольку они имеют существенные
последствия для приватности и безопасности пользователей. Этот
меморандум определяет конкретные применения протокола управления
состоянием Hypertext Transfer Protocol (HTTP), которые либо (a) не
рекомендуются IETF, либо (b) считаются вредоносными и не поощряются.
Этот меморандум также подробно рассматривает дополнительные аспекты
приватности, которые не охватываются спецификацией протокола управления
состоянием HTTP.
1. Введение
Механизм управления состоянием HTTP одновременно полезен и вызывает
споры. Он полезен, поскольку многочисленные приложения HTTP выигрывают
от возможности сохранять состояние между транзакциями HTTP, не кодируя
такое состояние в URL. Он вызывает споры, поскольку этот механизм
использовался для достижения целей, для которых не был разработан и к
которым плохо приспособлен. Некоторые из этих применений привлекли
значительную общественную критику, поскольку угрожают нарушить
приватность веб-пользователей, в частности путём раскрытия потенциально
конфиденциальной информации третьим сторонам, таким как веб-сайты,
которые пользователь посещал. Существуют также иные применения
управления состоянием HTTP, которые неуместны, хотя и не угрожают
приватности пользователя.
Поэтому этот меморандум определяет применения протокола управления
состоянием HTTP, установленного в RFC-2965, которые не рекомендуются
IETF либо считаются вредоносными и потому не поощряются.
В этом документе иногда используются термины, написанные прописными
буквами. Когда термины «MUST», «MUST NOT», «SHOULD», «SHOULD NOT» и
«MAY» появляются в верхнем регистре, они используются для обозначения
конкретных требований этой спецификации. Обсуждение значений терминов
«MUST», «SHOULD» и «MAY» приведено в [RFC-1123]; термины «MUST NOT» и
«SHOULD NOT» являются логическими расширениями этого употребления.
2. Применения управления состоянием HTTP
Цель управления состоянием HTTP состоит в том, чтобы позволить службе,
основанной на HTTP, создавать сохраняющиеся в нескольких транзакциях HTTP
сеансы с сохранением состояния. Один сеанс может включать транзакции с
несколькими серверными хостами. В одном сеансе могут также участвовать
несколько клиентских хостов, когда данные сеанса конкретного пользователя
совместно используются клиентскими хостами (например, через сетевую
файловую систему). Иными словами, «сеанс» сохраняет состояние между
«пользователем» и «службой», а не между конкретными хостами.
Важно понимать, что аналогичные возможности могут быть достигнуты и с
использованием «обычного» протокола HTTP и/или динамически создаваемого
HTML, без расширений управления состоянием. Например, информация о
состоянии может передаваться от службы пользователю путём встраивания
идентификатора сеанса в один или несколько URL, которые появляются в
перенаправлениях HTTP или динамически создаваемом HTML; а информация о
состоянии может возвращаться от пользователя службе, когда такие URL
появляются в запросе GET или POST. Формы HTML также могут использоваться
для передачи информации о состоянии от службы пользователю и обратно без
ведома пользователя о происходящем.
Однако средство управления состоянием HTTP действительно предоставляет
расширение функциональности по сравнению с обычными HTTP и HTML. На
практике эта дополнительная функциональность включает:
(1) Возможность обмениваться между пользователями URL ресурсов,
доступ к которым был получен во время сеансов с сохранением
состояния, без раскрытия информации о состоянии, связанной с
этими сеансами. (Например: «Вот URL записи веб-каталога FooCorp
о тех сандалиях, которые ты хотел.»)
(2) Возможность поддерживать состояние сеанса без «нарушения работы
кэша». То есть отделение состояния сеанса от URL позволяет
веб-кэшу поддерживать только одну копию именованного ресурса.
Если состояние поддерживается в URL, специфичных для сеанса,
кэшу, вероятно, пришлось бы поддерживать несколько идентичных
копий ресурса.
(3) Возможность реализовывать сеансы с минимальной конфигурацией
сервера и минимальными накладными расходами протокола по сравнению
с другими способами поддержания состояния сеанса.
(4) Возможность связывать пользователя с состоянием сеанса всякий раз,
когда пользователь обращается к службе, независимо от того,
входит ли пользователь через конкретную «домашнюю страницу» или
«портал».
(5) Возможность сохранять информацию о сеансе в постоянном хранилище,
чтобы «сеанс» мог поддерживаться между запусками клиента,
перезагрузками системы и сбоями клиента или системы.
2.1. Рекомендуемые применения
Использование управления состоянием HTTP уместно всякий раз, когда
желательно поддерживать состояние между пользователем и службой через
несколько транзакций HTTP, при условии, что:
(1) пользователь знает, что состояние сеанса поддерживается, и
соглашается на это;
(2) пользователь имеет возможность в любое время удалить состояние,
связанное с таким сеансом;
(3) информация, полученная благодаря возможности отслеживать
использование пользователем службы, не раскрывается другим
сторонам без явно выраженного согласия пользователя; и
(4) сама информация о сеансе не может содержать конфиденциальную
информацию и не может использоваться для получения
конфиденциальной информации, которая иначе недоступна
перехватчику.
Этот последний пункт важен, поскольку cookies обычно передаются в
открытом виде и, следовательно, легко доступны перехватчикам.
Примером такого рекомендуемого применения могла бы быть «корзина
покупок», существование которой явно доводится до сведения пользователя,
пользователь может явно «очистить» свою корзину покупок (либо запросив
её очистку, либо купив эти товары) и тем самым вызвать отбрасывание
совместно используемого состояния, а служба заявляет, что не будет
раскрывать привычки пользователя в покупках или просмотре третьим
сторонам без согласия пользователя.
Обратите внимание, что протокол управления состоянием HTTP фактически
позволяет поставщику службы отказаться предоставлять службу либо
предоставлять её на пониженном уровне, если пользователь или клиент
пользователя не выполняет запрос на поддержание состояния сеанса. При
отсутствии противоречащего этому законодательного запрета сервер МОЖЕТ
(MAY) отказаться предоставлять службу либо предоставлять её на
пониженном уровне при этих условиях. В качестве чисто практического
соображения службы, спроектированные для использования управления
состоянием HTTP, могут быть неспособны работать правильно, если клиент
его не предоставляет. Такие серверы СЛЕДУЕТ (SHOULD) корректно
обрабатывать такие условия и объяснять пользователю, почему полный
уровень службы недоступен.
2.2. Проблематичные применения
Следующие применения управления состоянием HTTP считаются неуместными
и противоречащими этой спецификации:
2.2.1. Раскрытие информации третьим сторонам
Управление состоянием HTTP НЕ ДОЛЖНО (MUST NOT) использоваться для
раскрытия информации о пользователе или привычках пользователя при
просмотре другим сторонам, помимо пользователя или службы, без явно
выраженного согласия пользователя. Такое использование запрещено даже
в том случае, если имя пользователя или иной внешне назначенный
идентификатор не раскрываются другим сторонам, поскольку сам механизм
управления состоянием предоставляет идентификатор, который может
использоваться для сбора информации о пользователе.
Поскольку такие практики побуждают пользователей обходить механизмы
управления состоянием HTTP, они, как правило, снижают эффективность
управления состоянием HTTP и поэтому считаются вредными для работы веба.
2.2.2. Использование в качестве механизма аутентификации
В целом неуместно использовать протокол управления состоянием HTTP в
качестве механизма аутентификации. Управление состоянием HTTP не
разрабатывалось с учётом такого использования, а меры защиты учётных
данных аутентификации отсутствуют как в спецификации протокола, так и в
широко развёрнутых клиентах и серверах HTTP. Большинство сеансов HTTP не
зашифровано, и поэтому «cookies» могут быть раскрыты пассивным
перехватчикам. Кроме того, клиенты и серверы HTTP обычно хранят «cookies»
в открытом тексте с небольшой защитой от раскрытия или вовсе без неё.
Поэтому управление состоянием HTTP НЕ СЛЕДУЕТ (SHOULD NOT) использовать
в качестве механизма аутентификации для защиты информации от раскрытия
неавторизованным сторонам, даже если сеансы HTTP зашифрованы.
Запрет на использование управления состоянием HTTP для аутентификации
включает как его использование для защиты информации, предоставляемой
службой, так и его использование для защиты потенциально
конфиденциальной информации о пользователе, вверенной заботе службы.
Например, было бы неуместно раскрывать имя, адрес, номер телефона или
платёжную информацию пользователя клиенту, который лишь предъявил cookie,
ранее связанный с этим пользователем.
Аналогично, управление состоянием HTTP НЕ СЛЕДУЕТ (SHOULD NOT)
использовать для аутентификации пользовательских запросов, если
неавторизованные запросы могут иметь нежелательные побочные последствия
для пользователя, кроме случая, когда пользователь осведомлён о
возможности таких побочных последствий и явно соглашается на такое
использование. Например, служба, позволяющая пользователю заказать товар
одним «щелчком», полностью основываясь на сохранённых «cookies»
пользователя, могла бы причинить пользователю неудобство, потребовав от
неё оспаривать списания с её кредитной карты и/или возвращать нежелательный
товар в случае раскрытия cookies третьим сторонам.
Некоторые применения управления состоянием HTTP для идентификации
пользователей могут быть относительно безвредными, например если вся
информация, которая может быть так раскрыта, принадлежит службе и служба
понесёт небольшой ущерб от раскрытия такой информации.
3. Соображения относительно пользовательского интерфейса для управления состоянием HTTP
Управление состоянием HTTP вызывает значительные споры из-за своей
способности раскрывать третьим сторонам информацию о привычках
пользователя при просмотре без ведома или согласия пользователя. Хотя
такое раскрытие возможно, оно является скорее не недостатком самого
протокола, а следствием неспособности реализаций клиентов HTTP (и
некоторых поставщиков служб на основе HTTP) защищать интересы
пользователей.
Как подразумевается выше, существуют иные способы поддерживать состояние
сеанса, помимо использования управления состоянием HTTP, а следовательно,
и иные способы отслеживать привычки пользователей при просмотре. В
действительности трудно представить, как протокол HTTP или клиент HTTP
могли бы реально помешать службе раскрывать другим сторонам «след щелчков»
пользователя, если служба решила бы это сделать. Поэтому защита такой
информации от ненадлежащего раскрытия должна быть обязанностью службы.
Реализации клиентов HTTP по своей природе не могут обеспечить такую
защиту, хотя они могут реализовать контрмеры, затрудняющие использование
управления состоянием HTTP как механизма, посредством которого такая
информация раскрывается.
Можно утверждать, что клиенты HTTP в целом должны обеспечивать большую
защиту от ненадлежащего раскрытия информации отслеживания независимо от
того, облегчалось ли раскрытие использованием управления состоянием HTTP
или каким-либо иным средством. Однако вопросы, связанные с другими
механизмами, выходят за рамки этого меморандума.
3.1. Возможности, требуемые от клиента HTTP
Готовность пользователя согласиться на использование управления
состоянием HTTP, вероятно, различается от службы к службе в зависимости
от того, доверяет ли пользователь службе надлежащее использование
информации и ограничение её раскрытия другим сторонам. Поэтому у
пользователя СЛЕДУЕТ (SHOULD) быть возможность управлять тем,
поддерживает ли его клиент запрос службы на использование управления
состоянием HTTP, для каждой службы отдельно. В частности:
(1) Клиенты НЕ ДОЛЖНЫ (MUST NOT) отвечать на запросы управления
состоянием HTTP, если это явно не включено пользователем.
(2) Клиентам СЛЕДУЕТ (SHOULD) предоставлять эффективный интерфейс, позволяющий
пользователям до того, как клиент предоставит серверу какую-либо
информацию о состоянии, просматривать и одобрять либо отклонять
любые конкретные запросы сервера на хранение информации о состоянии.
(3) Клиентам СЛЕДУЕТ (SHOULD) предоставлять эффективный интерфейс, позволяющий
пользователям предписывать своим клиентам игнорировать все запросы
конкретной службы на хранение информации о состоянии — для каждой
службы отдельно — немедленно в ответ на любой конкретный запрос
сервера, до того, как клиент предоставит серверу какую-либо
информацию о состоянии.
(4) Клиентам СЛЕДУЕТ (SHOULD) предоставлять эффективный интерфейс, позволяющий
пользователю отключать будущую передачу любой информации о состоянии
службе и/или удалять любую сохранённую информацию о состоянии для этой
службы, даже если пользователь ранее одобрил запрос службы на хранение
информации о состоянии.
(5) Клиентам СЛЕДУЕТ (SHOULD) предоставлять эффективный интерфейс, позволяющий
пользователю отменить ранее сделанный запрос не сохранять информацию
об управлении состоянием для данной службы.
3.2. Ограничения алгоритма сопоставления доменов
Алгоритм сопоставления доменов в разделе 2 RFC-2965 предназначен как
эвристический метод, позволяющий клиенту «угадать», являются ли два домена
частями одной и той же службы. Существует немного правил относительно того,
как могут использоваться доменные имена, а структура доменных имён и способы
их делегирования различаются от одного домена верхнего уровня к другому
(то есть клиент не может определить, какая часть домена была назначена
службе).
Поэтому НИКАКОЙ алгоритм сравнения строк (включая алгоритм сопоставления
доменов) не может считаться надёжным для различения домена, принадлежащего
конкретной службе, и домена, принадлежащего другой стороне.
Как указано выше, каждая служба в конечном счёте несёт ответственность за
обеспечение того, чтобы информация о пользователе не раскрывалась
ненадлежащим образом третьим сторонам. Раскрытие информации третьим сторонам
посредством управления состоянием путём тщательного выбора доменных имён или
назначения доменных имён хостам, поддерживаемым третьими сторонами, является
по меньшей мере столь же ненадлежащим, как раскрытие той же информации
другими способами.
4. Вопросы безопасности
Вся эта памятка посвящена вопросам безопасности.
5. Адреса авторов
Keith Moore
University of Tennessee Computer Science Department
1122 Volunteer Blvd, Suite 203
Knoxville TN, 37996-3450
EMail: moore@cs.utk.edu
Ned Freed
Innosoft International, Inc.
1050 Lakes Drive
West Covina, CA 81790
EMail: ned.freed@innosoft.com
6. Ссылки
[RFC 1123] Braden, R., "Requirements for Internet Hosts --
Application and Support", STD 3, RFC 1123, October 1989.
[RFC 2965] Kristol, D. and L. Montulli, "HTTP State Management
Mechanism", RFC 2965, October 2000.
[RFC 2109] Kristol, D. and L. Montulli, "HTTP State Management
Mechanism", RFC 2109, February 1997.
7. Полное заявление об авторских правах
Copyright (C) The Internet Society (2000). Все права защищены.
Этот документ и его переводы могут копироваться и предоставляться другим
лицам, а производные работы, которые комментируют или иным образом объясняют
его либо содействуют его реализации, могут подготавливаться, копироваться,
публиковаться и распространяться полностью или частично без каких-либо
ограничений при условии, что указанное выше уведомление об авторских правах и
этот абзац включены во все такие копии и производные работы. Однако сам этот
документ не может быть каким-либо образом изменён, например путём удаления
уведомления об авторских правах или ссылок на Internet Society либо другие
интернет-организации, кроме случаев, когда это необходимо для разработки
интернет-стандартов, и в таком случае должны соблюдаться процедуры в
отношении авторских прав, определённые в процессе разработки интернет-
стандартов, либо когда это требуется для его перевода на языки, отличные от
английского.
Предоставленные выше ограниченные разрешения являются бессрочными и не будут
отозваны Internet Society либо его правопреемниками или цессионариями.
Этот документ и содержащаяся в нём информация предоставляются на условиях
«КАК ЕСТЬ», И THE INTERNET SOCIETY И THE INTERNET ENGINEERING TASK FORCE
ОТКАЗЫВАЮТСЯ ОТ ВСЕХ ГАРАНТИЙ, ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, ПОМИМО
ПРОЧЕГО, ЛЮБУЮ ГАРАНТИЮ ТОГО, ЧТО ИСПОЛЬЗОВАНИЕ СОДЕРЖАЩЕЙСЯ ЗДЕСЬ ИНФОРМАЦИИ
НЕ НАРУШИТ КАКИЕ-ЛИБО ПРАВА, ИЛИ ЛЮБЫЕ ПОДРАЗУМЕВАЕМЫЕ ГАРАНТИИ ТОВАРНОЙ
ПРИГОДНОСТИ ИЛИ ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ.
Благодарность
Финансирование функции RFC Editor в настоящее время обеспечивается Internet
Society.