※私はWebアプリを作るエンジニアではない為、具体的なコードは出せません。
※雰囲気で理解してます。細かい点は正直まだわかってません。
Cookieの流れ
ログイン前
ユーザーが初めてWebサイトにアクセスすると、以下の流れでログイン画面が表示されます。
① ブラウザ → Webサーバ: ユーザーがURLにアクセス
② Webサーバ → ブラウザ: ログイン画面を返す
この時点では、まだユーザーの認証は行われていません。
ログインとログイン後の処理
③ブラウザ → サーバ
- 登録済みのユーザー名とパスワードをサーバーに送信(通常はPOSTメソッド)
- 重要: HTTPS通信で暗号化して送信することが必須
④サーバ
- 受信したユーザー名とパスワードをデータベースと照合
- 認証が成功したら、セッションを作成
- セッションストレージ(メモリ/ファイル/DB)にユーザー情報を保存
- ランダムで推測困難なセッションIDを生成
⑤ サーバー → ブラウザ
ログイン後のページを返す。
Set-CookieヘッダーでセッションIDをブラウザに保存するよう指示
ログイン後
⑥ブラウザ → サーバ: 自動的にCookie(セッションID)を送信
⑦サーバ: セッションIDからユーザー情報を取得
⑥サーバ → ブラウザ: 認証済みユーザー向けのコンテンツを返す
【攻撃】セッションハイジャック
大まかなイメージ図
④の部分で推測可能なID(今回の様な11111)のようなものを使うと、悪意ある第三者にIDを盗まれてuserAとしてWebサイトを閲覧されてしまう可能性がある。
【攻撃】セッションフィクセーション(及びクッキーインジェクション)
大まかなイメージ図
攻撃者はまず、自身でクッキーを作成する。
その後、攻撃対象にクッキーを仕込んで(=クッキーインジェクション)ログインをさせる。攻撃対象者がそのクッキーを使って例えばクレジットカード情報や住所などの機密情報をサーバ側に入力してしまったとする。
攻撃者は自身のクッキーで再度サーバにログイン。攻撃対象者が入力した機密情報を盗み見ることが出来る。




