前回まで、セキュリティ対策の責任や、安全ではないWebアプリができる理由を解説してきました。今回から、Webアプリやインフラを狙う具体的な攻撃手法や対策について説明します。

 今回のテーマは「セッション管理」です。セッション管理とは、クライアント(Webブラウザー)とWebサーバー間で通信するときの、状態遷移を管理する仕組みです。

 Webアクセスで一般的に利用するHTTP(Hypertext Transfer Protocol)というプロトコルには、状態遷移を管理する仕組みがありません。つまり、そのままでは動的なWebアプリケーションを動作させられないのです。そこで、開発者がセッション管理の仕組みを個々のWebアプリケーションで実装する必要があります。

 このセッション管理は攻撃者に狙われやすいポイントの一つです。セッション管理の設計・実装の不備に起因する脆弱性には、「セッション・ハイジャック」と「セッション固定攻撃」があります。Webアプリケーションで安全なセッション管理を実装するには、セッション管理の仕組みを理解し、セッション管理の不備をついた脆弱性を理解して設計・実装しなければなりません。

WebアプリケーションがセッションIDを発行

 HTTPは、リクエスト(要求)とレスポンス(応答)が一対になったプロトコルです。このため、同一ユーザーからのリクエストであっても、1回目のリクエストと2回目のリクエストは一連のものではなく、個別のリクエストとして処理されてしまいます(図1)。

図1 HTTPはステートレスなプロトコル
図1 HTTPはステートレスなプロトコル
[画像のクリックで拡大表示]