Http Cookieの概要/作成/セキュリティについて
自分用ノート。(この記事の内容をみて勉強しない方がいいです)
Http Cookieとは
Http Cookieとはサーバがユーザーのウェブブラウザに送信する小さなデータ(テキストファイル)であり、ブラウザに保存されたあと、リクエスト時にヘッダに含める。
一般的には二つのリクエストが同じブラウザから送信されたものであるかを知るために使用される。
主な用途としては、セッション管理、ユーザ設定などの保存、トラッキングが挙げられる。
以前はクライアント側の記憶領域に用いられたこともあったが、現在は上記の用途で利用される。
これはCookieが全てのリクエストで送信されるため、記憶領域として扱いデータ量が大きくなった際に性能が悪化するためである。
また、Cookieはブラウザ上でドメインに紐付けて保存される。
このドメインが閲覧中のサイトと同じ場合はファーストパーティCookie、違う場合はサードパーティCookieという。(Chromeなどブラウザの設定画面から保存されているCookieを見てみると分かりやすい。)
Cookieの作成流れ
-
サーバがレスポンスを返す際にヘッダに
Set-Cookie
ヘッダを含める。Set-Cookie: <cookie-name>=<cookie-value>
-
クライアント側は上記のCookieをブラウザに保存する。
-
以降、クライアント側は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攻撃を緩和できる。
参考
Discussion