Cookieとは、ブラウザが持っているデータのことで、サーバーにリクエストを送る際に自動的に送信されます。
参考:CookieとSessionを今度こそ完全に理解する【分かりやすく図解】
ただ、毎回すべてのCookieが送信される訳ではなく、「URLの条件とCookieに設定してある情報が一致した場合」のみサーバーに対してCookieが送信される仕組みになっています。
そしてCookieに設定してある情報のことを「属性」と言い、いくつかの種類があります。
今回はこの属性について、それぞれの意味を分かりやすく解説します。
少しでも参考になれば幸いです。
Cookieの各属性の意味を分かりやすく解説する
Cookieには主に以下の属性があります。
Name
Cookie名です。
ここに指定した名前でブラウザにCookieが保存されます。
Value
Cookieにセットする値です。
Name=Valueのように、Nameとセットで指定されます。
Expires
Cookieの有効期限です。
以下のような書式で設定されます。
Date: <day-name>, <day> <month> <year> <hour>:<minute>:<second> GMT
参考:Date
設定しなかった場合は、セッションクッキーの寿命(ユーザーがブラウザを閉じるまで)となります。
また、過去の時間を指定した場合はCookieが削除されます。
Max-Age
Cookieの期限までの秒数です。
ゼロや負の数字が指定された場合は、Cookieが期限切れになります。
ExpiresとMax-Ageがどちらも指定されている場合は、Max-Ageが優先されます。
Domain
Cookieを送信したいサーバーのドメイン名を指定します。
例えば、example.comを指定した場合、example.comを含むURLを指定したときにCookieが送信されます。(example.com, www.example.com, hoge.example.comなど)
また、何も指定しなかった場合は、このCookieを発行したサーバー(example.com)のみにCookieが送信されます。
別のサブドメインを持つサーバー(www.example.com, hoge.example.comなど)にはCookieは送信されません。
つまり、Domain属性は、指定しない方が「限定性」が高まるということです。
これはすなわち、Domain属性を指定しない方がセキュリティの強度が向上することを意味しています。
Cookieを発行したサイトに対してのみCookieを送信したい場合は、Domain属性は指定しないようにしましょう。
参考:CookieのDomain属性は*指定しない*が一番安全
Path
Cookieを送信するパスの名前を指定します。
つまり、送信するURLにここで指定するパスが含まれている場合のみCookieが送信されるということです。
例えば、Path=’/hoge’を指定した場合、hoge配下のリソース(‘/hoge/index.html’, ‘/hoge/huga/index.html’など)にアクセスした際にCookieが送信されます。
ほとんどの場合、指定したドメイン(example.com)配下のリソースに対しては、全てCookieを送信したいはずなので、Path=’/’を指定することが多いでしょう。
また、Path属性に何も指定しなかった場合は、Cookieを発行したページに対してのみCookieが送信されます。(/hoge/index.htmlでCookieを発行したなら、/hoge/index.htmlを指定したときのみCookieが送信される)
Secure
Secure(セキュア)な通信(HTTPS通信)が行われている場合のみサーバーに対してCookieを送信します。
逆に言えば、セキュアな通信でない場合(HTTP通信の場合)は、Cookieはサーバーに送信されません。
セキュリティをより堅牢にするため、HTTPS通信を行なっている場合は必ず指定するようにしましょう。
HttpOnly
JavaScript経由(Document.cookieなど)でCookieが取得できないようにします。
セキュリティを高めるため、JavaScriptでCookieを取得しない場合は指定するようにしましょう。
SameSite
Webサイト内のリンクを踏んで別のサイトに移動する際に、遷移先のサイトのCookieを送信するか否かを指定します。
指定できる値は、Strict, Lax, Noneのいずれかです。
それぞれ以下の意味合いを持ちます。
- Strict:リンクを踏んで別サイトに移動する場合はそのサイトのCookieは送信しない
- Lax:GET等の安全なメソッドの場合のみCookieが送信される。POSTの場合は送信されない
- None:どんな場合でもCookieを送信する
この設定を適切に行うことで、CSRF攻撃等に対するセキュリティ強度を高めることができます。
Strictを設定すれば安全ではありますが、ログイン機能がある別サイトに移動する際に毎回ログイン処理を行わなくてはならないため、基本的にはLaxを指定することが多いでしょう。
Cookieの各属性まとめ
最後にもう一度Cookieの属性の意味を振り返りましょう。
今回は以上です。
この記事が、Cookieに対する理解を深める上で少しでも参考になっていたら幸いです。
参考書籍
参考記事
- Set-Cookie
- 【PHP超入門】Cookieとセッションについて
- HTTP Cookieとは
- Cookieとセッション管理
- とほほのCookie入門
- Cookieの仕様とセキュリティ
- Cookieとは?仕組みと種類、利用の注意点について
- HTTPクッキーの属性について
- Cookieで指定可能な属性の種類と設定方法
- HTTPクッキーをより安全にするSameSite属性について(Same-site Cookies)
- Cookieの概要とセキュリティ