[1] [[Cookie]] の [DFN[[CODE(HTTP)@en[[[Secure]]]]]] [[属性]]は、
その[[クッキー]]が「[RUBYB[[[安全]]][secure]]」に扱われるべきことを示します。

* 仕様書

[REFS[
- [10] [CITE@en[RFC 6265 - HTTP State Management Mechanism]] ([TIME[2012-03-01 09:57:02 +09:00]] 版) <http://tools.ietf.org/html/rfc6265#page-9>
- [12] '''[CITE@en[RFC 6265 - HTTP State Management Mechanism]] ([TIME[2012-03-01 09:57:02 +09:00]] 版) <http://tools.ietf.org/html/rfc6265#section-4.1.2.5>'''
- [18] [CITE@en[RFC 6265 - HTTP State Management Mechanism]] ([TIME[2014-10-12 15:11:47 +09:00]] 版) <http://tools.ietf.org/html/rfc6265#section-5.2.5>
- [21] [CITE@en[RFC 7469 - Public Key Pinning Extension for HTTP]] ([TIME[2015-05-05 21:00:37 +09:00]] 版) <https://tools.ietf.org/html/rfc7469#section-4.4>
]REFS]

* 意味

[13] [CODE(HTTP)@en[[[Secure]]]] [[属性]]は[[クッキー]]の適用範囲が
[[「保安」通信路]]に制限されることを表します [SRC[>>12]]。

* 値

[2] この[[属性]]は値をとりません。
存在するかしないかで[[ブール値]]を表します。

[FIG[
[FIGCAPTION[
[11] [[RFC 6265]] における [CODE(HTTP)@en[[[Secure]]]] [[属性]]の構文
]FIGCAPTION]

[PRE(ABNF code)[
 secure-av         = "Secure"
]PRE]
]FIG]

* 文脈

[22] [[セッションクッキー]]その他[[セキュリティー]]的に重要な[[クッキー]]では、
[CODE(HTTP)@en[[[Secure]]]] [[属性]]を指定する[['''べきです''']] [SRC[>>21]]。

[28] 
[[HTTPS]] の利用が当然となった現在となっては、
[CODE[Secure]]
[[属性]]を付ける必要があるかないか判断するのは意味がありません。
安全側に倒すということで、
いっそすべての[[クッキー]]に [CODE[Secure]]
[[属性]]を付けてしまってもいいかもしれません。

* 処理

[19] [[属性値]]はあっても無視されます [SRC[>>18]]。

[3] [[クッキー]]は [[HTTP]] [[応答]]で[[鯖]]に、[[DOM]] [[属性]]
[CODE(JS)@en[[[document]].[[cookie]]]] で[[スクリプト]]に提供されます。

[14] [[HTTP]] に関しては、
[[安全な通信路]]上を[[要求]]が送信される場合にのみ当該[[クッキー]]を含めることになっています。
具体的には [[TLS]] や [[SSL]] を使う ([[HTTPS]] の) 場合がこれに含まれ [SRC[>>4, >>12]]、
単体の [[HTTP]] を [[TCP]] 上で用いる場合は含まれません。

[15] [[DOM]] については、 [[HTTPS]] によって取得された[[文書]]が[[安全]]とみなされ、
[[単体のHTTP]] は[[安全]]ではないとみなされます。

[5] [CODE(HTTP)@en[[[Secure]]]] [[属性]]が設定されていな場合は、
そのような[[安全な通信路]]でなくても送信されます [SRC[>>4]] し、
[[安全な通信路]]を経ていない[[文書]]でも[[スクリプト]]からアクセスできます。

;; [20] [CODE(HTTP)@en[[[Set-Cookie:]]]] も参照。

* 安全性

[16] [CODE(HTTP)@en[[[Secure]]]] [[属性]]は[[クッキー]]が[[安全な通信路]]から[[安全]]でない通信路へと漏れることを防ぐ上では有用です。
[[起源]]の定義には [[URL scheme]] も含まれているので、通常の方法では [[DOM]]
上でも [[HTTPS]] のページの[[スクリプト]]から [[HTTP]] のページの[[スクリプト]]へと直接 
[CODE(HTTP)@en[[[Secure]]]] [[属性]]由来の値を引き渡すこともできません。

[17] しかし [CODE(HTTP)@en[[[Secure]]]] [[属性]]のついた[[クッキー]]を発行することは [[HTTPS]]
でない [[HTTP]] からも可能です。従って攻撃者は[[安全]]でない[[通信路]]から[[クッキー]]を注入可能であり、
[[一貫性]]の観点では [CODE(HTTP)@en[[[Secure]]]] [[属性]]は意味をなしません [SRC[>>12]]。

* 歴史

** Netscape Cookie

[6] この[[属性]]は当初より [[Netscape Cookie]] で規定されていました。

[REFS[
- [4] [[Netscape Cookie]]: [CITE[Client Side State - HTTP Cookies]]
<http://web.archive.org/web/19961125090609/http://www2.netscape.com/newsref/std/cookie_spec.html>
]REFS]

** IETF Cookie

[7] [[IETF]] の [[RFC 2109]] [CSECTION@en[4.2.2 Set-Cookie2 Syntax]]、[[RFC 2965]] 
[CSECTION@en[3.2.2 Set-Cookie2 Syntax]] でも定義されていました。

[8] >>7 では「安全」な方法について明確には規定されていませんでした。両仕様によれば、
[[利用者エージェント]]が (場合によっては[[利用者]]に諮った上で)
決めて[['''構いません''']]し、設定されたときと同等以上に安全な方法で送出[['''するべき''']]ですが、
それ以上の具体的なケースには触れられていませんでした。

[9] この[[属性]]が省略された場合、安全でない方法で送信しても[['''構わない''']] [SRC[[[RFC 2109]] [CSECTION@en[4.3.1 Interpreting Set-Cookie]], [[RFC 2965]] [CSECTION@en[3.3.1 Interpreting Set-Cookie2]]]] 
とされていました。

[23] [CITE@en[Potential changes to cookies in Chrome.]]
([[Mike West]] 著, [TIME[2015-11-27 19:32:51 +09:00]] 版)
<https://lists.w3.org/Archives/Public/public-webappsec/2015Nov/0069.html>

[24] [CITE@en[draft-west-leave-secure-cookies-alone-04 - Deprecate modification of 'secure' cookies from non-secure origins]]
([TIME[2015-11-28 05:30:43 +09:00]] 版)
<https://tools.ietf.org/html/draft-west-leave-secure-cookies-alone-04>

[25] [CITE@en[Deprecate modification of 'secure' cookies from non-secure origins]]
([TIME[2016-12-24 19:55:06 +09:00]])
<http://httpwg.org/http-extensions/draft-ietf-httpbis-cookie-alone.html>

[26] [CITE@en[976073 - (leave-secure-alone) prevent HTTP responses from setting cookies with secure flag]]
([TIME[2017-05-11 16:12:54 +09:00]])
<https://bugzilla.mozilla.org/show_bug.cgi?id=976073>

[27] [CITE@en[draft-ietf-httpbis-cookie-alone-01 - Deprecate modification of]]
([TIME[2020-09-27T12:14:20.000Z]], [TIME[2020-10-01T03:13:47.064Z]])
<https://tools.ietf.org/html/draft-ietf-httpbis-cookie-alone-01>