LoginSignup
0
1

More than 1 year has passed since last update.

Cookieってなに?おいしいの?

Last updated at Posted at 2022-12-04

cookieって何?おいしいの?

cookieの定義

  • サーバからのレスポンスでブラウザに送られ、以降一定期間の間ブラウザに保存され、送信されるデータのこと。

なぜ必要

ステートレスなHTTP通信に、ステートフルな情報を期限付きで付加できるから

  • 一定期間の間、毎リクエストでクッキーCookie: key=valueが送信される
  • ブラウザ側で保持しておきたい情報やユーザの設定値を格納できる
  • ユーザ認証に使える(ログイン情報を保持する)

いつ使うの

  • セッション管理
    • ログイン、ショッピングカートなど
  • ユーザ設定
  • トラッキング

ヘッダー一覧

Set-Cookie

  • サーバがレスポンスで設定し、ブラウザに「このCookieを保存しとけ、あとリクエスト毎に送信して来い」と指示する。
Set-cookie: cookie-price=130;cookie-kind=choco;
  • また、有効期限なども設定できる
    • Max-Age:期間で指定
    • Expires:日付時刻で指定
    • HttpOnly:Javascriptのdocument.cookieによってアクセスできないようにする
    • Secure:HTTPSのみでCookieを送信する(HTTPでは送られない)
Set-cookie: id=xxx; Expires=Thu,21 Dec 2022 12:00:00 GMT; Secure; HttpOnly

Cookie

  • Set-cookieで送信されてきたCookieが、リクエスト時にこのヘッダーに設定される
Cookie: id=xxx; cart-item=yyy;

リスクと対策

性能面

  • 毎リクエストで送信されるので、Cookieが大きいと通信性能が悪化
  • 対策:クライアント側で保存しておきたいデータは、代わりにWebStorage APIIndexedDBをつかう

セキュリティ面

  • 中間者攻撃

    • 暗号化されていないHTTP通信の場合、中間者にCookieを傍受されるかも
    • 対策: Set-cookieSecureを設定し、HTTPSでのみCookieが送られるようにする
  • XSS(クロスサイトスクリプティング)攻撃

XSS攻撃: 攻撃者が悪意のあるスクリプトをクライアント側に埋め込み、ユーザがアクセスなどしたときに実行させる

  • フォームなどの入力時に埋め込まれた悪意のあるスクリプトから、Cookieが参照され悪用される可能性がある

    • 対策:Set-cookieHttpOnlyを設定し、JavascriptからCookieが参照されないようにする
  • CSRF(クロスサイトリクエストフォージェリ)

    • 古い呼び方だと「イメタグ攻撃」
    • 意図しないリクエストをWebサーバへ送信させる攻撃。
      • 例: 銀行口座から100ドルを送金するGETリクエストGET http://bank.com/transfer.do?acct=BOB&amount=100 GTTP/1.1imgタグのsrcに埋め込み、ローディング時に発火させる
    • Cookieの有効期限が切れていない状態でこれを踏むと...
    • 対策
      • CSRFトークンをサインインごとに再生成し、リクエストごとにヘッダーに含めるようにする。サーバ側でチェックし、期待値でなければリクエストを中止する。
      • Cookieの有効期限を短くする(SameSite属性をStrictorLaxに設定)
0
1
3

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