Rowan Merewood氏は、ますます採用される新しいCookieポリシーの観点で、状況に必要なスコープとセキュリティに応じてCookieを作成および構成する方法について説明した。Merewood氏は、リクエストで送信されたCookieをトレースおよびデバッグするために開発者が利用できるオプションも紹介した。
Merewood氏は、必要な動作に応じて微調整できる最初のポイントとして、まず、次に示すデフォルトのCookie構成を推奨した。
Set-Cookie:
__Host-cookiename=cookievalue;
Secure;
Path=/;
HttpOnly;
SameSite=Lax
Secure属性とPath属性は、__Host
プレフィックスによって有効になる。Secure
属性は、Cookie通信を暗号化された送信に制限する。それによって、ブラウザーがsecure/encrypted HTTPS接続を介してのみCookieを使用することを保証する。新しいCookie属性が段階的に展開されつつあり、Merewood氏は、まだHTTPSに移行していない人にそうすることを推奨した。
Cookieパス構成(Path=\ )は、現在のドキュメントオリジン(example.comなど)へのすべてのリクエストに対してCookieが送信されることを意味する。そのオリジンのサブドメイン(images.example.comなど)は含まない。
HttpOnly
属性により、Cookieはリクエストヘッダーでのみ送信される。クライアント側のスクリプト(JavaScriptなど)を介してアクセスできないため、クロスサイトスクリプティング(広範な攻撃手法)を介して簡単に盗まれることはない。
SameSite
属性は、Strict
、Lax
、None
の3つの値のいずれかを取ることができ、同じサイトのCookieが存在する場合のブラウザーの動作を規制する。Strict
構成では、ブラウザは、ターゲットドメインと同じドメイン/サイトから発信されたリクエストでのみこれらのCookieを送信する。これにより、クロスサイトリクエストフォージェリ(XSRF)攻撃が効果的に軽減される。これは、サイトのユーザに対する信頼で、ブラウザ内に保持しているものを悪用する。Merewood氏は説明した。
クロスサイトリクエストフォージェリ(CSRF)攻撃は、誰がリクエストを開始したかに関係なく、特定のオリジンへのリクエストにCookieが添付されているという事実によるものです。たとえば、
evil.example
にアクセスすると、your-blog.example
へのリクエストがトリガーされ、ブラウザは関連するCookieを適切に添付します。ブログがそれらのリクエストの正当性の検証に注意を払っていない場合、evil.example
は投稿の削除や独自のコンテンツの追加などのアクションをトリガーする可能性があります。
したがって、Strict
構成では、Cookieはファーストパーティのコンテキストでのみ送信される。これは、パスワード変更や購入など、最初のナビゲーションの前に常に存在する機能にCookieが関連している場合に適している。ただし、この動作では制限されすぎとなるファーストパーティのユースケースがある。このような場合は、Lax
値の方が適している可能性がある。この場合、Cookieは、画像やフレームを読み込むための呼び出しなど、クロスサイトのサブリクエストでは保留されるが、ユーザがリンクをたどるなど、外部サイトからURLに移動する場合には送信される。
サイトは、サードパーティのコンテキストで必要なCookieがSameSite=None; Secure
(つまり、両方の属性を一緒に存在する)としてマークされていることを確認する必要がある。Merewood氏は、関連するブログ記事でChromeの動作について説明している。
Secure
なしでNone
を指定した場合、Cookieは拒否されます。ただし、ブラウザの実装には相互に互換性のない違いがいくつかあります。そのため、[…]軽減策をとる必要があります。
samesite sandboxでブラウザの現在の実装をオンラインで確認できる。sandboxは、Edge 85(ブラウザー設定で許可されたファーストパーティおよびサードパーティのCookie)について次の結果を報告する。
これらの結果は、CookieのSameSite
属性がnoneに設定されているが、Secure
属性が設定されていない場合、Edge 85は、Internet Engineering Task Forceを通してGoogleが出資するIBC(Incrementally Better Cookies)の推奨事項に従わないことを示している。
2020年7月の時点で、Safari、Firefox、BraveはデフォルトですべてのサードパーティCookieをブロックした。Safariを使用すると、組み込みサイトはStorage Access APIを使用して、ファーストパーティのCookieをセットするための許可を要求できる。Chromeは、2022年までにサードパーティのCookieのブロックを開始する予定である。
Merewood氏は、Chrome 84以降でCookie構成をデバッグする方法の詳しいデモを続けてきた。話の全ては、オンラインで入手でき、豊富な説明、イラスト、デモンストレーションが含まれている。
web.dev LIVEは、Googleが主催する3日間のオンラインコミュニティイベントで、ウェブ開発の現状を取り上げている。2020年のイベントは6月末に開催された。記録されたすべてのセッションは入手可能となっている。