0
1

Cookieについてのまとめ

Last updated at Posted at 2024-02-19

Cookieの概念

  • Cookieは、サーバーがWebブラウザに送信する小さなデータの塊です。
  • WebブラウザはこのCookieをローカルコンピュータに保存し、指定されたドメインにアクセスする際にこれを送信します。
  • HTTPは無状態プロトコルですが、Cookieを用いることで状態を持たせることができます。

Cookieの用途

  • セッション管理:ログイン状態の維持やショッピングカートの情報保存などに使用されます。
  • 個人設定:ユーザーの設定やテーマの選択など、個人化された体験を提供するために使われます。
  • 追跡:ユーザーの行動や嗜好を追跡し、分析やマーケティングに役立てます。

Cookieに関連するHTTPリクエスト/レスポンスヘッダー

HTTPリクエストヘッダー

GET /sample_page.html HTTP/2.0
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry

HTTPレスポンスヘッダー

HTTP/2.0 200 OK
Content-Type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry

セキュリティ上の脆弱性

  • MITM攻撃(中間者攻撃)
  • XSS(クロスサイトスクリプティング)
  • CSRF(クロスサイトリクエストフォージェリ)

セキュリティを強化するための属性

  • HttpOnly:JavaScriptを介してCookieにアクセスすることを防ぎます。

    Set-Cookie: id=q1w2e3; HttpOnly
    
  • Secure:HTTPSプロトコルを使用する際にのみCookieを送信します。

    Set-Cookie: id=q1w2e3; Secure
    
  • SameSite:同一サイト/異なるサイトからのリクエストに対するCookieの送信ルールを定めます。SameSiteの基準は、「登録可能なドメイン」によって決まります。

    • SameSiteの基準
      • ドメインがhttps://example.comの場合
        • https://example.com/en-US/docs/ (ルート不問)
        • https://api.example.com/en-US/ (サブドメインは問いません)
        • https://example.com:8080 (ポートは問いません)
        • https://example2.com (登録可能なドメインが異なる)
        • http://example.com (プロトコルが異なる)
    • SameSiteの値
      • Strict:同一ドメインからのリクエストのみにCookieを送信します。
        Set-Cookie: id=q1w2e3; SameSite=Strict
        
      • Lax:リンクを介したリクエストを含む、同一ドメインからのリクエストに対してCookieを送信します。
        Set-Cookie: id=q1w2e3; SameSite=Lax
        
      • None:任意のドメインからのリクエストに対してCookieを送信しますが、この場合はSecure属性が必須です。
        Set-Cookie: id=q1w2e3; SameSite=None; Secure
        

有効範囲を定めるための属性

api.example.comでCookieを生成した場合

  • Domain:指定されたドメインに対するHTTPリクエストであれば、Cookieを送信する。指定ドメインがなければ、サブドメインは除外されます。

    Set-Cookie: id=q1w2e3; domain=example.com
    
    • ⭕ www.example.com
    • ⭕ api.example.com
    • ⭕ example.com
    Set-Cookie: id=q1w2e3;
    
    • ❌ www.example.com
    • ⭕ api.example.com
    • ❌ example.com
  • Path:指定したURLパスを含むHTTPリクエストの場合にのみ、Cookieを送信します。

    Set-Cookie: id=q1w2e3; path=/docs
    
    • ⭕ /docs
    • ⭕ /docs/
    • ⭕ /docs/Web/
    • ⭕ /docs/Web/HTTP
    • ❌ /
    • ❌ /docsets
    • ❌ /fr/docs

参考文献

0
1
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
0
1