0
どのような問題がありますか?

投稿日

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

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を設定し、JavascritpからCookieが参照されないようにする
  • CSRF(クロスサイトリクエストフォージェリ)

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

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
0
どのような問題がありますか?
新規登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
新規登録ログイン
ストックするカテゴリー