Cookie および Public Suffix List
最終更新日 2024年04月30日(火)
Table of Contents
herokuapp.com
は Mozilla Foundation の Public Suffix List に登録されています。このリストは、複数のブラウザ (Firefox、Chrome、Opera など) の最新バージョンで、Cookie の適用範囲を制限するために使用されています。言い換えると、この機能がサポートされるブラウザでは、herokuapp.com
ドメインのアプリケーションによる *.herokuapp.com
に対する Cookie の設定が阻止されます。*.herokuapp.com
の Cookie は現在 Internet Explorer で設定できますが、この動作は信頼できず、今後変更される可能性があります。
これは、カスタムドメインを使用しているアプリケーションには影響しません。
履歴コンテキスト
Cookie の適用範囲設定
通常、Web サイトでは、ブラウザの Cookie の適用範囲はその Web サイト独自のドメイン、またはそのドメインが属するより高いレベルの DNS ドメインに対して設定されます。これは、サーバーの Set-Cookie HTTP レスポンスヘッダーにある「domain」属性によって制御されます。たとえば、https://www.cs.berkeley.edu/
では、ユーザーのブラウザで、それ自体にのみ、末尾が cs.berkeley.edu
のすべてのホスト (radlab.cs.berkeley.edu
など)、または末尾が berkeley.edu
のすべてのホスト (english.berkeley.edu
など) に再送信が可能なように Cookie を設定できます。末尾が edu のすべてのホスト (www.stanford.edu
など) に適用されるように Cookie を設定することはできません。これは .edu
に一意ではなく、.com
、.org
、.net
を含むすべてのトップレベルドメイン (TLD) に適用されます。当然ながら、サーバーには domain=.edu
で Set-Cookie ヘッダーを渡す機能がありますが、これはセキュリティが強固なブラウザでは推奨されません。
TLD レベルでの Cookie 設定に関するこの制限は、Web が使用されるようになった当初から存在します。この制限はセキュリティ上の理由から存在し、Cookie のサードパーティへの誤送信を阻止して、クッキースタッフィングや、より一般的なタイプのセッション固定化攻撃に対する部分的な保護に役立ちます。一般的な根拠として、同じ DNS サブドメイン内の Web サーバーは通常、同じ組織 (前述の例ではカリフォルニア大学バークレー校 (University of California, Berkeley))が操作しているとみなされるため、相互に攻撃する可能性は低いと推定されます。大半の TLD では一般のあらゆるユーザーがサブドメインを登録できるため、この推定は TLD レベルでは該当しません。
単なる TLD の問題ではない
これは、セカンドレベルドメイン (.co.uk
、.ne.jp
など) を疑似 TLD として使用し、サブドメインを登録できるユーザー (amazon.co.uk
など) についての制約が少ないまたは制約がない多くの国を考慮すると、さらに複雑になります。
この問題に対応するため、これらのドメインが DNS 階層のどのレベルに該当するかに関係なく、ブラウザのベンダーは内部で維持されるパブリックドメインのリストを使用しました。必然的に、これは非常に基礎的なレベルにおけるブラウザ全体の動作の不整合につながりました。
Public Suffix List
Mozilla Foundation は最終的に、これらのパブリックドメインをすべて記録し、ブラウザのベンダー全体で共有する、Public Suffix List と呼ばれるプロジェクトを開始しました。一部のブラウザでは Public Suffix List を使用していません。
Cedar および herokuapp.com
Cedar スタック上の Heroku アプリケーションはすべて、デフォルトで herokuapp.com
ドメインによってホストされているため、Heroku ではパブリックサフィックスの問題にも対応しています。
Heroku では、Public Suffix List に登録することのメリットは、複数のアプリにわたって Cookie を共有できるという危険かつほとんど有益でない状況に勝ると確信しています。
パブリックドメインで、複数のアプリケーション間で Cookie を共有する適切なユースケースも多数ありますが、アプリケーションにとって、カスタムドメインを使用すればよりよく安全に行うことができます。
追加情報
- Public Suffix List プロジェクトには、このリストが使用されるその他の領域の部分的なリストもあります。このリストは https://publicsuffix.org/learn/ にあります。
- セッション固定化や Cookie ハイジャックの問題、そしてこれらが具体的にどのように Heroku に適用されるのかについての説明は、「Origin Cookies: Session Integrity for Web Applications」 (Cookie の起源: Web アプリケーションのセッション整合性) に記載されています。
- Cookie および全般についての、一般的なブラウザのセキュリティモデルの詳細は、Michal Zalewski 氏の著書「The Tangled Web」を参照することをお勧めします。