RFC 2109 と RFC 2965 は、Cookie の処理を標準化するための歴史的な試みでした。残念ながら、それらはブラウザーが実際に行うこととは似ていないため、完全に無視する必要があります。
実際の動作は、主に元の Netscape cookie_spec によって定義されていましたが、これは仕様として非常に不十分であり、ブラウザのさまざまな違いが生じています。
- 受け入れられる日付形式。
- 複数の一致があった場合に同じ名前の Cookie がどのように処理されるか。
- 非 ASCII 文字がどのように機能するか (または機能しないか);
- 引用/エスケープ;
- ドメイン マッチングの方法。
RFC 6265 は、この混乱を一掃し、ブラウザーが何を目指すべきかを明確に成文化する試みです。歴史上、ブラウザがこれを行ったことがないため、domain
ブラウザが送信する必要があるとは言いません。path
Cookie が親 (*) からのものであることを検出できないためdomain
、Cookie を別々に保持したい場合は、ドメインが重複しないようにホスト名に注意する必要があります。設定されている場合、オンにdomain
設定された Cookieexample.com
は常に に継承されfoo.example.com
ます。
したがって、将来的に個別の Cookie を持つサブドメインが必要になる可能性がある場合は、サイトに「no-www」ホスト名を使用しないでください (親から機密性の高い Cookie を読み取れないようにする必要があります)。evil.example.com
また、 Cookie の値が他のサイトに挿入されるのを防ぐために、完全に別個の Cookie コンテキストが本当に必要な場合は、example.com
完全に別個のドメイン名を使用するしかありません。
一部の攻撃モデルに対して有効な代替手段は、たとえばHMACを使用して、生成するすべての Cookie 値に署名することです。
*: ある種の方法があります。必要な Cookieと同じ設定で Cookie を削除してみてください。そのときに Cookie が消えた場合は、それらと設定があったはずなので、元の Cookie は問題ありませんでした。そこにまだ Cookie がある場合、それは別の場所からのものであり、無視することができます。これは不便で、JavaScript なしで行うのは非現実的です。原則として、攻撃者は挿入された Cookie を同時に削除する可能性があるため、完全ではありません。domain
path
domain
path