💨

Http Cookieの概要/作成/セキュリティについて

2021/07/04に公開

自分用ノート。(この記事の内容をみて勉強しない方がいいです)

Http Cookieとは

Http Cookieとはサーバがユーザーのウェブブラウザに送信する小さなデータ(テキストファイル)であり、ブラウザに保存されたあと、リクエスト時にヘッダに含める。

一般的には二つのリクエストが同じブラウザから送信されたものであるかを知るために使用される。

主な用途としては、セッション管理、ユーザ設定などの保存、トラッキングが挙げられる。

以前はクライアント側の記憶領域に用いられたこともあったが、現在は上記の用途で利用される。
これはCookieが全てのリクエストで送信されるため、記憶領域として扱いデータ量が大きくなった際に性能が悪化するためである。

また、Cookieはブラウザ上でドメインに紐付けて保存される。
このドメインが閲覧中のサイトと同じ場合はファーストパーティCookie、違う場合はサードパーティCookieという。(Chromeなどブラウザの設定画面から保存されているCookieを見てみると分かりやすい。)

Cookieの作成流れ

  1. サーバがレスポンスを返す際にヘッダにSet-Cookieヘッダを含める。

    Set-Cookie: <cookie-name>=<cookie-value>
    
  2. クライアント側は上記のCookieをブラウザに保存する。

  3. 以降、クライアント側はhttpリクエスト時に自身のもつCookieをCookieヘッダとしてリクエストヘッダに含める。

    Cookie: yummy_cookie=choco; tasty_cookie=strawberry
    

Cookieの持続時間

Cookieの持続時間の指定方法は2通りある。

  • セッションCookie。現在のセッションが終わると破棄される。

  • 持続的Cookie。レスポンスヘッダのSet-CookieヘッダにExpires, Max-Age属性で指定する。

Set-Cookie: id=a3fWa; Expires=Wed, 31 Oct 2021 07:28:00 GMT;

Cookieのセキュリティ

Cookieへのアクセスを制限する属性は2通りある。

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2021 07:28:00 GMT; Secure;HttpOnly
  • Secure属性。httpsプロトコル上でしかCookieをリクエストヘッダ上に含めることができない。httpのサイトではSecure属性を使用したCookieを保存することができない。中間者攻撃を防ぐことができる。

  • HttpOnly属性。ブラウザが保管するCookieにJavaScriptがアクセスできなくなる(Document.cookie)。ログイン時のセッションIDなどJavaScriptが利用する必要性がないのでこの属性を指定するべきである。XSS攻撃を緩和できる。

参考

https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies

Discussion