"$Origin-"プレフィックスは削除され、"$Host-"プレフィックスが追加されました。 (2015/10/13追記)(2015/10/17 記事更新)
背景の、domain属性の指定に誤りがあったため修正しました。「domain=my-example.com」-> 「domain=example.com」(2015/10/14追記)
draft 05よりプレフィックスが$から__に変更されました(2015/12/1追記)
Googleの方によって「Cookie Prefixes」という仕様が提案されています(draft-west-cookie-prefixes-01)
以下のCookieに関する仕様を提案しているMike West氏による提案である
また、既にChromiumのnet-dev メーリングリストでも話題に上がっています。
Intent to Implement: Cookie Prefixes
プレフィックスを付けるのは"ugly"だとしつつも、有用だという意見があるようです。
背景
Cookieに付いている属性が変更されていないことをサーバは確信できません。
ドメイン属性を付与している場合は、Secure属性をつけていたとしても、サブドメインのURLより属性が変更される可能性があります。
例えば、後からサブドメインからSecure属性無しのCookieで上書きできます。
- https://example.com で「id=1;domain=example.com;path=/;secure;」を送る
- http://a.example.comで「id=2;domain=example.com;path=/;」を送る
以上の問題に対応するためにCookie名にプレフィックスを付ける手法が提案されています。
提案されている手法では、Cookieヘッダのシンタックスを変更すること無くCookieの名前にプレフィックスを付けることで属性に制約を設けます。
__Secure- プレフィックス
Cookie名に __Secure- が付いている場合は、Secure属性がついていなければいけません(MUST)
Secure属性がついてない場合は、拒否される
Set-Cookie: __Secure-SID=12345; Domain=example.com
Secure属性がついていれば受け付ける
Set-Cookie: __Secure-SID=12345; Secure; Domain=example.com
__Host- プレフィックス
$Host-プレフィックスが付与することで、設定されたホストからのみに提出するように制限できます。具体的にはCookieの属性を以下のように設定するように制限されます。
- Domain属性が付いていてはいけない(MUST)
- Path属性が"/"でなければならない(MUST)
- Secure属性がついてなければならない(MUST)
- URIのschmeが安全でなければならない(概ねhttpsだと思う)
以下のCookieは拒否される(Pathが無い、Domainが指定されている)
Set-Cookie: __Host-SID=12345 Set-Cookie: __Host-SID=12345; Secure Set-Cookie: __Host-SID=12345; Domain=example.com Set-Cookie: __Host-SID=12345; Domain=example.com; Path=/ Set-Cookie: __Host-SID=12345; Secure; Domain=example.com; Path=/
以下のCookieは受け付ける
Set-Cookie: __Host-SID=12345; Secure; Path=/
$Origin- プレフィックス
最新版の仕様では"$Origin-"は削除されました(2015/10/17追記)
$Origin-プレフィックスが付与することで、設定されたホストからのみに提出するように制限できます。具体的にはCookieの属性を以下のように設定するように制限されます。
- Domain属性が付いていてはいけない(MUST)
- Path属性が"/"でなければならない(MUST)
- httpsといったSecureなオリジンからset-cookieする場合は、Secure属性が付いてなければいけない(MUST)
以下のCookieは拒否される(Pathが無い、Domainが指定されている)
Set-Cookie: $Origin-SID=12345 Set-Cookie: $Origin-SID=12345; Secure Set-Cookie: $Origin-SID=12345; Domain=example.com Set-Cookie: $Origin-SID=12345; Secure; Domain=example.com
以下のCookieは受け付ける
Set-Cookie: $Origin-SID=12345; Path=/
ただし、HTTPSなどのセキュアなオリジン空は以下のようにSecure属性を付与されている必要がある
Set-Cookie: $Origin-SID=12345; Secure; Path=/
ユーザエージェントの変更
この仕様のように動作するためには、ブラウザの変更が必要である。
変更点は仕様中で記述されています。