セッションハイジャックとは?(1)
今回は、「セッションハイジャック」のお話をしてみたいと思います。
Webを見るときのHTTPの話なので、まずはHTTPの仕組みをおさらいしましょう。
ブラウザとWebサイト(Webサーバ)は、HTTPという手段を使ってやりとりをします。
そして、HTTPというプロトコル(通信手段)は、「ステートレス」という特徴を持っています。
どういうことかというと、ブラウザがHTTPで何かをダウンロードするときには、「GET」コマンドというものを使います。
例えば、「index.html」というWebページと「index2.html」というページを取得する場合には、以下のように接続します。
1. クライアントがWebサーバに対して「index.html」ファイルを要求
『GET /index.html HTTP/1.0』
2. Webサーバがクライアントに、「index.html」を渡す
3. クライアントがWebサーバに対して「index2.html」ファイルを要求
『GET /index2.html HTTP/1.0』
4. Webサーバがクライアントに、index2.htmlを渡す
このような形で、欲しいページやファイルがあった場合には、一回ずつGETコマンドというものを使って、Webサーバに要求します。
だから、上記の1と3は関連性がありません。なのでWebサーバに取っては、1がクライアントAで、2がクライアントBでも、わからないんです。
これが「ステートレス」、つまり「状態を覚えていない」という意味ですね。
では、会員制のサイトなどで、ユーザ名やパスワードを使ってログインする場合を考えてみましょう。
あれって、ログインした時の通信と、その次にページを見るときの通信が同じユーザだとわかってるはずですよね?
つまり上記の1と3を同じユーザからのセッションだと判別する仕組みが必要なんです。
それを解決するのが「Cookie」(セッションID)です。
※Cookieは以下を参照してください
2で応答を返すときに、Webサーバが「Cookie」というセッションを覚えさせるために利用するIDを同時に渡します。
そして、3の要求をする時に、2でもらったCookieをWebサーバに渡すことで、1のセッションと3のセッションを同一のユーザであると、関連付けることができるんですね。
でも、このCookieを他のユーザが利用して、ファイルの取得要求の際、Webサーバに渡したらどうなるでしょう?
これがセッションハイジャックです。
次回はもう少し詳しく見てみましょう。