連載
» 2008年10月21日 00時00分 UPDATE

もいちどイチから! HTTP基礎訓練中(7):基礎のキソ、エブリバディ・セッション管理! (2/3)

[杉山俊春,株式会社ユービーセキュア]

セッション管理はHTTPの基本

講師 「今回は、Webアプリケーションの基本ともいえるセッション管理について……」

 今回の勉強会は、Webアプリケーションにおけるセッション管理の基本の話が中心であった。

 Webアプリケーションでは、HTTPによって通信を行っている。しかし、HTTP通信ではブラウザからの要求(リクエスト)とサーバからの応答(レスポンス)を1つの単位として通信が完結する形となっているため、通常複数の通信間の関連性を管理することは困難である。そのため、Webアプリケーション(またはWebサーバ)レベルで管理番号のようなものを発行することで、複数にわたる通信間の関連性の管理を実現している。この仕組みを「セッション管理」と呼ぶ。

図1 セッション管理の概要 図1 セッション管理の概要

 このセッション管理を利用する代表的な例として「ログイン状態の管理」や「画面遷移状態の管理」が挙げられる。特に「ログイン」を必要とするサイトなどは、今日では非常に一般的なものとなっているため、セッション管理を理解することは、Webアプリケーションを正しく理解するために非常に重要な要素となる。

 セッション管理を行う際には管理番号のようなものを利用すると前述したが、これを一般的に「セッションID」と呼ぶ。システム上で一意となるセッションIDをユーザーのブラウザとWebアプリケーションで共有することによって、Webアプリケーションがユーザーを特定することが可能となる。共有する仕組みは、Cookieを利用するものと、GET/POSTパラメータなどを利用するものとで大きく2つに分けられる。いずれの仕組みもWebアプリケーション側がセッションIDを発行してユーザーへの送信を行い、ユーザーが以降のアクセスでそのセッションIDを毎回Webアプリケーションへ送信する形となる。

図2 HTTPリクエスト、レスポンスの例 図2 HTTPリクエスト、レスポンスの例

 Cookieを利用したセッション管理では、ブラウザが自動でCookieを送信する仕組みを持っているので、Webアプリケーションの自由度が高くなるため採用されているケースが多い。GET/POSTパラメータなどを利用したセッション管理では、画面遷移をする際には必ず(リンクをクリックするときなどでも)セッションIDを送信する必要があり、安全にセッションIDを送信するための仕組みを組み込む必要がある。また、パラメータを使用したセッション管理は、画面遷移の自由度が低くなり、ユーザビリティの低下にもつながる場合がある。

 Cookieを利用したセッション管理では、Cookieはブラウザから自動で送信されるため、別のユーザーが同じURL(例えば、http://www.example.co.jp/MemberInfoなど)にアクセスをした場合でも、Webアプリケーション側で各ユーザーに合わせた情報を表示することができる。この性質は非常に便利であり、Webアプリケーションでリンクを作成する際に特別な処理が必要ない。また、外部サイトからの遷移でもセッション管理を行うことが可能となる。

 しかし便利な半面、Cookieだけに頼ってしまった場合、例えば登録情報の変更完了画面や掲示板のような画面でも同様に別のユーザーでアクセスを行った場合、別の処理を行ってしまうので、クロスサイトリクエストフォージェリ(CSRF)のような問題につながる場合もある。

図3 同じリンクをクリックした際の違うユーザーのリクエスト+同じ登録情報変更の処理(クリックで拡大します) 図3 同じリンクをクリックした際の違うユーザーのリクエスト+同じ登録情報変更の処理(クリックで拡大します)

 そのため、Cookieを利用したセッション管理でも、POSTパラメータなどでもセッション管理用の値を利用する必要がある。一般的に「トークン」と呼ばれるこのセッション管理用のパラメータは、第三者が推測できない値で、かつセッションIDと関連付けがなされているべきである。そうしておけば上記のようなクロスサイトリクエストフォージェリの問題は起きず、Webアプリケーション側でエラーとすることができる。

【関連記事】

星野君のWebアプリほのぼの改造計画

第4回 まこと先輩と星野君とCSRFの微妙な関係

http://www.atmarkit.co.jp/fsecurity/rensai/hoshino04/hoshino01.html


クウ 「ふえー。休憩だー」

ナツ 「ちゃんとついていけてる〜?」

クウ 「はい。ここら辺までならなんとかー」

ナツ 「ふむ。えらいえらい」

ジュン 「ナッちゃーん! 久しぶりー!」

ナツ 「おー! 久しぶりー!」

ジュン 「ナッちゃんが来るって分かってたらもうちょっと予定考えたんだけどなぁ」

ナツ 「なんかあるの?」

ジュン 「この後、別の予定があるから、あんまいられないのだよね。勉強会終わったら懇親会とかあるけど、参加するん? 私は参加しない予定だったー」

ナツ 「いや、今日はクウと軽くお茶して帰ろっかなって思ってるけど〜。一緒にお茶する?」

ジュン 「おー。そうなんだ。お茶するくらいなら行けるな〜♪ お邪魔していい?」

クウ 「おおー。ぜひぜひご一緒しましょう♪」

r12illust3.gif

講師 「前半は、セッション管理の基本みたいなところを話しましたが、じゃあ、実際にセッション管理をするときに起きる問題として……」

Copyright© 2017 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。