この文書は、 K. Moore, N. Freed: Use of HTTP State Management (RFC 2964), October 2000. を 橋本英彦 が日本語訳した物です。 この文書の取り扱いについては、[Studying HTTP] の RFC 日本語訳を利用するにあたってに従って下さい。
Network Working Group Request for Comments: 2964 BCP: 44 Category: Best Current Practice
K. Moore
University of Tennessee
N. Freed
Innosoft
October 2000
この文書は、インターネットコミュニティにおけるインターネット標準化過程プロトコルを規定し、改良のために議論と提案を求めるものである。 このプロトコルの標準化状態と状況については、"Internet Official ProtocolStandards" (STD 1) の最新版を参照していただきたい。 この文書の配布に制限は無い。
Copyright © The Internet Society (2000). All Rights Reserved.
IESG では、以下のメカニズムではドットを含まないようなホスト名を扱う時には .local トップレベルドメイン (TLD) を内部的に使用しているが、その拡張的手法は将来登録されるかもしれない実際の .local TLD では作動しないであろう、という事を注記する。
"HTTP 状態管理メカニズム" (RFC-2965)、及びその前のもの (RFC-2109) にて記述されたメカニズムは多くの様々な目的のために使用する事ができる。 しかしながら、それらは重要なユーザのプライバシーやセキュリティに関わりを持つためにそのプロトコルの現在の、また潜在的な使われ方のいくつかについては、議論を呼んでいる。 この文書は、(a) IETF によって推奨されていない、(b) 有害であり、やめるように考えられている、というようなハイパーテキスト転送プロトコル (HTTP) 状態管理プロトコルの特有の使い方を識別する。 またこの文書では、HTTP 状態管理プロトコルの仕様書によってはカバーされない追加的なプライバシーについての考察も詳述する。
HTTP 状態管理メカニズムは有用であるが、議論を呼んでいる。 多数の HTTP アプリケーションが URL 中にその状態をエンコードする事なく、HTTP 処理間で状態を保つ能力から利益を得ている、という点で有用である。 しかしこのメカニズムはそのために設計されたものではないし、十分に適したものではないという事象を達成するために使われている、という点で議論を呼んでいる。 これらの使い方のうちいくつかは、特にユーザが訪れた Web サイトのような第三者に機密性の高い情報を潜在的に漏洩する事によって、それらがweb ユーザのプライバシーを侵す恐れがあるために多量の公な批判を受けている。 たとえそれらがユーザのプライバシーを侵さなくても不適切である HTTP 状態管理の使い方は他にもある。
それ故にこの文書は IETF によって推奨されない、また有害であるが故にやめるように考えられている RFC-2965 中に詳述される HTTP 状態管理プロトコルの使い方を識別する。
この文書は時折大文字にて現れる用語を使う。 "MUST", "MUST NOT","SHOULD", "SHOULD NOT", "MAY" の各用語が大文字で現れた場合、それらはこの仕様書の特定の必要条件を示すために使われている。 "MUST", "SHOULD","MAY" の各用語の意味についての議論は [RFC-1123] 中に現れている。また"MUST NOT" と "SHOULD NOT" の各用語はこの使用法の論理的拡張である。
HTTP 状態管理の目的は、HTTP に基づいたサービスが複数の HTTP 処理を通じて持続するような状態を持つ "セッション" を生成できるようにする事である。 単一のセッションが複数のサーバホストにおける処理を含む事ができきる。 特定のユーザのためのセッションデータがクライアントホスト間で(例えば、ネットワーク中のファイルシステム経由で) 共有されている場合には、複数のクライアントホストもまた単一のセッションに含まれうる。 言い換えれば、"セッション" は "ユーザ" と "サービス" の間では状態を維持するが、特定のホスト間では維持しない。
同じような機能は、状態管理拡張を使わなくとも、"裸の{bare}" HTTP プロトコルや、動的に生成される HTML を使う事で達成できると認識する事が重要である。 例えば、状態情報は HTTP リダイレクトの、または動的に生成される HTML の中に現れる一つ以上の URL 中にセッション識別子を埋め込む事によって、サービスからユーザへと転送する事ができるし、またそのようなURL が GET や POST リクエスト中に現れた時には、ユーザからサービスへと返す事もできる。 HTML のフォームもまた、サービスからユーザやそれ以降へと、ユーザにそこで起こる事を気付かせる事なく、状態情報を渡すために使う事ができる。
しかし、HTTP 状態管理機能は通常の HTTP や HTML を超える機能性的増大を提供している。 実際には、この追加的機能性には以下を含む。
HTTP 状態管理を使う事は、もし以下のようなあれば、複数の HTTP 処理を通じて状態をユーザとサービスの間で維持する事を望む場合にはいつでも適切である。
クッキーは通常平文にて送られ、それ故に盗聴者は簡単に利用可能なので、最後の点は重要である。
推奨される使い方の例としては "ショッピングカート" があるだろう。 ショッピングカートの存在は明らかにユーザに知られているが、ユーザは明白に自身のショッピングカートを (空にする事を要求するか、それらの品目を購入する事によって) "空にする" 事ができ、それによって共有される状態は破棄される事となり、サービスはユーザの同意無しに第三者にユーザの買物や閲覧の習慣を明らかにしないであろうという事を断言する。
ユーザやユーザのクライアントがセッション状態を保持するためのリクエストを引きうける事に失敗した場合、実際上は HTTP 状態管理プロトコルによってサービス提供者がサービスを提供する事を拒否したり、あるいはサービスの水準を下げたりする事ができる。 法律上禁止でなければ、サーバはそれらの状況の元で、サービスを提供する事を拒否したり、サービスの水準を下げたりする事ができる。 純粋に現実的な考慮として、HTTP 状態管理を利用するように設計されたサービスはクライアントがそれを提供しなければ適切に機能しないようにできる。 そのようなサーバは、そのような条件を上品に扱うべきであり、何故完全な水準のサービスが利用できないかを説明すべきである。
以下のような HTTP 状態管理の使い方は、不適当でありこの仕様書には反するものと考える。
HTTP 状態管理は、ユーザの明示的同意無しに、ユーザやサービスを除く他のパーティにユーザ、あるいはユーザの閲覧の習慣についての情報を漏らすために使われてはならない。 状態管理メカニズム自身がユーザについての情報をまとめるために使われる識別子を提供するものであるので、そのような使い方は、たとえユーザの名前や他の外面的に割り当てられている識別子が他のパーティに晒されていなくても禁止されている。
そのような慣習はユーザに HTTP 状態管理メカニズムを敬遠させてしまうので、HTTP 状態管理の有効性は減少されていき、そしてそれ故に web の操作において有害であるとみなされるのである。
HTTP 状態管理プロトコルを認証メカニズムとして使う事は概して不適切である。 HTTP 状態管理はそのような使い方を念頭において設計されていないし、認証証明書を保護するためのもの{safeguards} がプロトコルの仕様にも広く展開されている HTTP クライアントやサーバにも欠如している。 ほとんどのHTTP セッションは暗号化されておらず、それ故に "クッキー" は受動的盗聴者に晒される可能性がある。 更に、HTTP クライアントやサーバは一般的に晒される事に対してほとんど、あるいは全く保護を為さない平文にて "クッキー" を保存する。 それ故に HTTP 状態管理は、たとえ HTTP セッションが暗号化されていたとしても、認証されていないパーティに晒される事から情報を守るための認証メカニズムとして使われるべきではない。
認証のために HTTP 状態管理を使う事に対する禁止事項は、サービスによって提供される情報を守るために使うものも、サービスの関心事を任されるユーザについての潜在的に機密性の高い情報を守るために使うものも含む。 例えば、以前にユーザに関連付けられているクッキーを単に見せるクライアントへ、ユーザの名前や住所、電話番号、請求書情報を晒すのは不適当であろう。
同様に、もし認証されていないリクエストが望ましくない副作用をユーザにもたらす可能性がある場合に、ユーザがそのような副作用の可能性に気付いており、かつそのような使い方に明示的に同意しているので無ければ、HTTP状態管理は認証ユーザのリクエストに使われるべきではない。 例えば、完全にユーザの保存する "クッキー" に基づいて、ユーザが商品を一回の "クリック" で注文出来るサービスは、クッキーが第三者に晒されるという事態において、クレジットカードの料金について反論する事や、望まぬ商品を返す事を要求する事によってユーザに迷惑をかける事ができるであろう。
ユーザを識別するための HTTP 状態管理の使い方の中には比較的無害であるものがあり、例えば、そのように晒される唯一の情報がサービスに所有されていれば、サービスはそのような情報が晒される事からの害にはほとんど苦しまなくてもよいであろう。
HTTP 状態管理は、ユーザの認識や同意無しに、ユーザの閲覧の習慣についての情報を第三者に晒すというその可能性のために非常に議論を呼んでいる。 そのように晒す事は可能である一方で、これはプロトコル自身の不備というよりも、むしろユーザの関心を保護するための HTTP クライアント実装 (やいくつかの HTTP に基づくサービスの提供者) の欠陥である。
上に示した通り、HTTP 状態管理を使う以外にセッション状態を維持するための他の方法があり、それ故にユーザの閲覧の習慣を追跡しうる事において他の方法がある。 なるほど、どのように HTTP プロトコル、あるいは HTTP クライアントは実際にサービスからもしサービスがそうする事を選んだ場合に他のパーティへのユーザの "クリック追跡" を明らかにさせないようにする事ができるのかを想像する事は難しい。 それ故に不適切に晒される事から情報を守る事はサービスが責任をもたなければならない。 HTTP クライアント実装は本来そのような保護を提供できないが、HTTP 状態管理がそのような情報が晒されるメカニズムとして使われる事をより難しくさせるような対応策を実装できる。
晒す事が HTTP 状態管理の使い方を容易にさせるか、それともいくつかの他の意図を容易にさせるかにかかわらず、HTTP クライアントが一般的に情報の追跡に不適切に晒される事に対してより強い保護を提供すべきという事には議論の余地がある。 しかし、他のメカニズムに関する問題はこの文書の範囲を超える。
HTTP 状態管理を使う事に同意するユーザの気持ちは、サービスがその情報を適切に使うかどうか、また他のパーティからに晒す事を制限するかどうかをユーザが信用するかどうかによって、あるサービスから他のものへと変わるであろう。 それ故にユーザは、サービス毎に、クライアントが HTTP 状態管理を使うためのサービスの要求をサポートするかどうか制御できるべきである。 特に、以下に注意せよ。
RFC-2965 の section 2 中のドメイン一致アルゴリズムは、クライアントが二つのドメインが同じサービスの一部かどうかを "推測" できるための帰納法として意図されている。 どのようなドメイン名が使われ得るかに付いての規則はほとんど無いし、ドメイン名の構造、またそれらがどのように選ばれているかはあるトップレベルドメインから他のものによって異なる (例 クライアントはドメインのどの部分がサービスに割り当てられているかを見分ける事はできない) 。 それ故に、特定のサービスに所属するドメインと、他のパーティに所属するドメインとを区別するために当てにできる (ドメイン一致アルゴリズムを含む) 列比較アルゴリズム{string comparison algorithm}は無い。
上述されたように、各々のサービスは最終的にユーザの情報は不適切に第三者に漏洩されないという事を保証するという責任を持つ。 念入りなドメイン名の選択による、あるいはドメイン名を第三者によって維持されるホストに割り当てる事による状態管理を通しての第三者への情報の漏洩は、少なくとも他の手段によって同じ情報を漏洩する事と同じくらい不適切である。
この文章全体が、セキュリティについての考察のためのものである。
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
Copyright © The Internet Society (2000). All Rights Reserved.
この文章とその翻訳は、複製し他人に配布する事ができ、またその実装についてのコメント、その他の方法を用いた説明、その補助となるような派生的作業はそれらの中に上の著作権表示とこの段落を含む事によって、その全て又は一部を、いかなる制約も受けずに、作成、複製、発表、及び配布する事ができる。 しかしながら、インターネット標準化プロセスにて定義されている著作権のための手続きに従わなければならないような場合の中でインターネット標準を開発するという目的に必要である、あるいは英語以外の言語に翻訳する必要があるという場合を除いて、この文章自体を、その著作権表示や、インターネット学会あるいは他のインターネット団体への参照を削除するような、いかなる変更もできない。
上で認めた制限された許諾は永続的なものであり、インターネット学会及びその継承者や譲渡者によって取り消される事は無い。
この文書とここに含まれた情報は、"そのまま {AS IS}" である事を基に提供され、インターネット学会、及び IETF は、この中の情報の使用が、商用利用及び特定用途においていかなる権利もいかなる暗黙的保障も侵害していないという保障への制限を含め、明示的に又は暗黙的に、全ての保障を放棄する。
RFC Editer 機構の資金は、現在インターネット学会から提供されている。