1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cookie(セッション)と関連攻撃についてざっくり理解したい

Posted at

※私はWebアプリを作るエンジニアではない為、具体的なコードは出せません。
※雰囲気で理解してます。細かい点は正直まだわかってません。

Cookieの流れ

ログイン前

ユーザーが初めてWebサイトにアクセスすると、以下の流れでログイン画面が表示されます。

ブラウザ → Webサーバ: ユーザーがURLにアクセス
Webサーバ → ブラウザ: ログイン画面を返す

この時点では、まだユーザーの認証は行われていません。

security-ページ2.drawio.png

ログインとログイン後の処理

ブラウザ → サーバ

  • 登録済みのユーザー名とパスワードをサーバーに送信(通常はPOSTメソッド)
  • 重要: HTTPS通信で暗号化して送信することが必須

サーバ

  1. 受信したユーザー名とパスワードをデータベースと照合
  2. 認証が成功したら、セッションを作成
  3. セッションストレージ(メモリ/ファイル/DB)にユーザー情報を保存
  4. ランダムで推測困難なセッションIDを生成

サーバー → ブラウザ

ログイン後のページを返す。
Set-CookieヘッダーでセッションIDをブラウザに保存するよう指示

security-ページ3.drawio (2).png

ログイン後

ブラウザ → サーバ: 自動的にCookie(セッションID)を送信
サーバ: セッションIDからユーザー情報を取得
サーバ → ブラウザ: 認証済みユーザー向けのコンテンツを返す

security-ページ4.drawio.png

【攻撃】セッションハイジャック

大まかなイメージ図

④の部分で推測可能なID(今回の様な11111)のようなものを使うと、悪意ある第三者にIDを盗まれてuserAとしてWebサイトを閲覧されてしまう可能性がある。

security-ページ5.drawio (2).png

【攻撃】セッションフィクセーション(及びクッキーインジェクション)

大まかなイメージ図

攻撃者はまず、自身でクッキーを作成する。
その後、攻撃対象にクッキーを仕込んで(=クッキーインジェクション)ログインをさせる。攻撃対象者がそのクッキーを使って例えばクレジットカード情報や住所などの機密情報をサーバ側に入力してしまったとする。
攻撃者は自身のクッキーで再度サーバにログイン。攻撃対象者が入力した機密情報を盗み見ることが出来る。

security-ページ5.drawio (4).png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?