Webセッションとアクセス制御
Webセッションとは、HTTPが個々のリクエストを独立して扱う無状態のプロトコルであるため、複数のリクエストを同一の利用者による一連の操作として結び付けるために、サーバが発行するセッションIDなどで認証後の状態を管理する仕組みである。アクセス制御は、認証された利用者にだけ保護された情報や機能への操作を許すことであり、その前提としてセッションが正当な利用者のものであり続ける必要がある。セッションの乗っ取りとは、攻撃者がセッションIDなどを入手して利用者になりすまし、パスワードを知らなくても認証済みの状態を引き継ぐことを指す。
原理と仕組み
ログインに成功したサーバは、利用者ごとに推測されにくいセッションIDを発行し、ブラウザはこれをCookieなどに保持して以降のリクエストに付けて送る。サーバはIDを照合することで、どのリクエストが認証済みの利用者によるものかを判断する。つまり、セッションIDそのものが認証の証拠として機能するため、IDを盗んだ者はパスワードを入力せずに利用者として振る舞えてしまう。この性質により、セッション管理の安全性はIDの秘匿と有効期間の管理に依存することになる。サーバ側でセッションIDを無効化すれば、そのIDを第三者が取得しても以後のアクセスは認証済みとして扱われなくなり、盗まれたIDの価値を失わせられる。
判断の基準
ログアウト時に行うべき処理は、ブラウザ側の操作ではなく、サーバ側でセッションIDを無効化することである。ブラウザのキャッシュを消去しても、サーバ側のセッションIDが有効なままであれば、盗まれたIDによるセッションの継続は防げない。 また、セッションIDをブラウザのディスクなどに保存しても、ログアウト後にそのIDが残って再利用されるおそれがあるため、保存場所を変えるだけでは乗っ取りの防止にならない。
セッションIDをURLに含める設計も避けるべきである。URLは閲覧履歴やアクセスログ、リンク経由などから外部に漏れるおそれがあり、そこに含まれたIDは乗っ取りの危険を高める。
重要な情報をブラウザに送信する直前に、パスワードによる再認証を求める対策は、セッションIDだけを盗んだ攻撃者による情報の閲覧を抑えるために有効である。ただし、この対策はセッションの乗っ取りそのものを防ぐものではなく、乗っ取られた場合の被害の拡大を抑えるための補助的な手段である。
この節の続き
- 実際の場面
- 試験で問われやすい区別
ここまでが冒頭部分です。ログインすると、無料でも1日2節まで全文をお読みいただけます。
アプリでこの節を読む