kostumブログ

勉強したことやノート代わりのアウトプットに使っています。

Cookieを知る

目的

結果

Cookie

  • サーバーがブラウザに送信するデータ
  • ブラウザーに保存される
  • その後のリクエストと共に同じサーバーへ送信される
  • 一般的には2つのリクエストが同じブラウザから送信されたものであるかを知るために使用される

  • 以下の3つの用途で使用される
    • セッション管理
      • サーバーが覚えておくべきもの(ログイン、ショッピングカートなど)
    • パーソナライズ
      • ユーザー設定、テーマ、その他の設定
    • ラッキング
      • ユーザーの行動の記録
  • クライアントへデータを保存する手段としてCookieが使われていたが、現在では、ストレージAPIを使用することが推奨されている。
  • Cookieは全てのリクエストで送信されるので、性能を悪化させる必要がある。
    • Web Storage APIIndexedDBがある。
  • サーバーはレスポンスでSet-Cookieヘッダーを送信することができる。
  • 有効期限や期間を設定でき、それが切れると、その後はCookieが送信されなくなる
  • 特定のドメインやパスへの追加の制約を設定できる
  • Cookieをどこに送信するかを制限できる

Set-CookieヘッダーとCookieヘッダー

Cookieの持続時間の定義

  • 2通りの方法で定義することができる
    • セッションCookie
      • 現在のセッションが終了すると削除される。
      • ブラウザはいつ「現在のセッション」が終わったと見なすかを定義する
    • 持続的Cookie
      • Expires属性で指定された時刻、またはMax-Ageで指定された期間が経過した後に削除される
      • Expiresの日付を設定した場合、Cookieが設定されるクライアントの日時に関連する。

Cookieへのアクセス制限

  • 意図しない第三者スクリプトからアクセスされないようにするには、Secure属性とHttpOnly属性の2つの方法がある

Secure属性

  • HTTPSプロトコル上の暗号化されたリクエストでのみサーバーに送信され、安全でないHTTPでは送信されない
  • ただし、これによってCookie内の機密情報へのアクセスを全て防げない。
    • 例えば、クライアントのハードディスクへアクセスすることで読み取られる可能性がある

HttpOnly属性

  • JavascriptDocument.cookie APIにアクセスできなくなり、サーバーに送信されるだけになる
    • 例えば、サーバー側のセッションを持続させるCookieJavascriptが利用する必要はないので、HttpOnly属性をつけるべき
    • この予防策は、クロスサイトスクリプティング攻撃(XSS)を緩和するのに役立つ

Cookie送信先の定義

  • DomainおよびPath属性は、Cookieのスコープを定義する

Domain属性

  • Cookieを受信することができるホストを指定する
  • 指定されていない場合は、規定でCookieを設定したのと同じホストとなり、サブドメイン以外は除外される
  • 指定された場合、サブドメインは常に含まれる。そのため、Domainを指定すると省略時よりも制限が緩和される。ただし、サブドメイン間でユーザーに関する情報を共有する場合は有用になる。

Path属性

  • Cookieヘッダーを送信するためにリクエストされたURLの中に含む必要があるURLのパスを示す

SameSite属性(= Strict, Lax, None

Strict

  • 発生したサイトのみに送信される

Lax

  • ユーザーがCookieのオリジンのサイトに移動したときにもCookieが送信される
    • 例えば、外部サイトからリンクを辿った場合

None

  • Cookieを発生元サイトへリクエストとサイト間のリクエストの両方で送信されるが、安全なコンテキストでのみ送信される

    SameSite=NoneならSecure属性も設定する必要がある

  • SameSite=Noneが設定されていない場合、Laxとして扱われる

Cookieの接頭辞

  • Cookieの設計では、Cookieが安全なオリジンに設定されているかどうか、どこに設定されたのかをサーバーが確認することができないようになっている
  • サブドメイン上にある脆弱性のあるアプリケーションがDomain属性を使用してCookieを設定すると、他の全てのサブドメインCookieにアクセスできるようにすることができる
  • この仕組みはセッション固定攻撃で悪用される可能性がある ⇨ 対策方法: セッションの固定化
  • しかし、多層制御として、Cookieの接頭辞を使うことが可能で、以下の2つが利用可能

    • __Host-

      • Set-Cookieヘッダーが受け入れられるのは
        • Secure属性で指定
        • 安全なオリジンから送信
        • Domain属性を含んでいない
        • Path属性が/に設定されている

        場合のみ

    • __Secure-

      • Set-Cookieディレクティブが受け入れられるのは
        • Secureである
        • 安全なオリジンから送信されている

        場合のみ(__Host-接頭辞よりも弱い)

  • 上記の制約に適合していないCookieは、送られてもブラウザーが拒否する

  • アプリケーションサーバーは、ユーザーが認証されているか、あるいはCSRFトークンが正しいかどうかを判断するときに、特定のCookie名をチェックするだけなので、これはセッションの固定化に対する防御手段として効果的に機能する

JavascriptでのDocument.cookiesを使用したアクセス

  • Document.cookieプロパティを使用して新しいCookieを作成することができ、HttpOnlyフラグが設定されていない限り、既存のCookieJavascriptからアクセスすることもできる
  • しかし、Javascriptで生成されたCookieはHttpOnlyフラグを含められない
  • セキュリティの影響に注意すること。XSSによって盗まれる可能性がある。

セキュリティー

  • 全てのCookieの値がエンドユーザーから見え、変更できる
  • アプリケーションによっては、サーバー側で検索される不透明な識別子を使用するか、JSONウェブトークンのような代替の認証/機密性メカニズムを調べたほうが良いかも
  • Cookieへの攻撃を緩和する方法には以下のようなものがある
    • HttpOnly属性を使用して、JavascriptからCookieの値にアクセスするのを防ぐ
    • 認証などの機密情報のためのCookieは、持続時間を短く、SameSite属性をStrctまたはLaxに設定する

ラッキングとプライバシー

サードパーティーCookie

  • Cookieドメインやスキーム(httphttpsなど)に関連づけられる(Set-CookieDomain属性が設定された場合は、サブドメインにも関連づけられる)
  • Cookieドメインとスキームが現在のページと一致している場合、そのCookieはこのページと同じサイトからのものとみなされ、ファーストパーティーCookieと呼ばれる(Webページをホスティングしているサーバーが設定する)
  • ドメインとスキームが異なる場合、そのCookieは同じサイトのものとはみなされず、サードパーティーCookieと呼ばれる(他のドメインのサーバーに保存されている画像やその他のコンポーネント(例えば、広告バナーなど)など)

Cookieに関する規制

  • Cookieの使用を対象とした法規制には、以下のようなものがある。
  • これらの規制は、これらの管轄区域(注意事項あり)のユーザーがアクセスする全世界のウェブ上のあらゆるサイトに適用されるため、世界的な広がりを持っている
  • これらの規制の要件には、次のようなものがある
    • サイトがCookieを使用することをユーザーに通知すること
    • ユーザーが一部または全てのCookieをオプトアウトできるようにすること
    • ユーザーがCookieを受け取らなくても、サービスの大部分を利用できるようにすること

日本のCookie規制について

Cookie規制はなぜ強まるのか?取り巻く状況の変化を解説! | Priv Lab

ブラウザに情報を格納する他の方法

  • 別のアプローチとして、Web Storage APIがある
  • SessionStorageLocalStorageセッションCookie持続的Cookieに対応しているが、ストレージの容量制限がCookieより大きく、サーバーに送信されることがない
  • より構造化された大量のデータは、indexedDB API またはその上に構築されたライブラリを使用して保存することができる。
  • ゾンビCookieと呼ばれる、Cookieが削除された後に再作成されるようにするための他の技術が作成されている
    • これらの技術は、ユーザーのプライバシーとユーザー制御の原則に違反し、データプライバシー規則に違反する可能性がある

参考

HTTP Cookies - MDN

Using HTTP cookies - HTTP | MDN

Cookies, the GDPR, and the ePrivacy Directive

Cookies, the GDPR, and the ePrivacy Directive - GDPR.eu

IETF Internet-Draft

Cookies: HTTP State Management Mechanism (日本語訳)