[18] [[Cookie]] の [DFN[[CODE(HTTP)@en[[[HttpOnly]]]] [[属性]]]]は、当該[[クッキー]]が
[[JavaScript]] から取得できず、 [[HTTP]] でのみ送信されるべきであることを表します。

[33] [[XSS]] などの[[脆弱性]]で[[セッションID]]など重要な[[クッキー]]が盗まれる危険性を下げるため、
[[JavaScript]] からアクセスできない [CODE(HTTP)@en[[[HttpOnly]]]]
[[クッキー]]を用いることが極めて好ましいと考えられています。
近年の[[クッキー]]の用途のほとんどは [[HTTP]] からのみアクセスできれば十分でしょうから、
基本的にはこの[[属性]]は指定するべきでしょう。

* 仕様書

[REFS[
- [13] [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>
- [15] '''[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.6>'''
- [20] [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.6>
- [22] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2014-11-02 01:25:00 +09:00]] 版) <https://html.spec.whatwg.org/#dom-document-cookie>
- [25] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-03-15 01:40:28 +09:00]] 版) <https://html.spec.whatwg.org/#attr-meta-http-equiv-set-cookie>
- [27] [CITE@en-GB-x-hixie[HTML Standard]] ([TIME[2015-03-15 01:40:28 +09:00]] 版) <https://html.spec.whatwg.org/#dom-websocket>
]REFS]

* 意味

[16] [CODE(HTTP)@en[[[HttpOnly]]]] [[属性]]は[[クッキー]]の適用範囲を [[HTTP]]
[[要求]]だけに限定します。 [SRC[>>15]]

[17] [CODE(HTTP)@en[[[HttpOnly]]]] [[属性]]のついた[[クッキー]]は「[RUBYB[非]@en[non-]] HTTP」 API
からはアクセスできません [SRC[>>15]]。 具体的には [CODE(JS)@en[[[document.cookie]]]]
[[属性]]からこれを取得することはできません。

;; [19] ここでいう「[[HTTP]]」には [[HTTPS]] や [[WebSocket]] も含まれています。

* 「非HTTP」API

[23] [CODE(JS)@en[[[document.cookie]]]] は「非HTTP」APIです [SRC[>>22]]。つまり
[CODE(HTTP)@en[[[HttpOnly]]]] [[クッキー]]は [CODE(JS)@en[[[document.cookie]]]]
で取得できません。

[26] [CODE(HTML)@en[[[<meta http-equiv=Set-Cookie>]]]] は「非HTTP」API です [SRC[>>25]]。

[29] [[HTTP]] [CODE(HTTP)@en[[[Set-Cookie:]]]] / [CODE(HTTP)@en[[[Cookie:]]]]
[[ヘッダー]]は、「非HTTP」APIでは''ありません''。

[28] [[WebSocket接続の確立]]時の [CODE(HTTP)@en[[[Cookie:]]]]
[[ヘッダー]]は、「非HTTP」API では''ありません'' [SRC[>>27]]。
[CODE(HTTP)@en[[[Set-Cookie:]]]] も同様と思われます。

* 構文

[FIG[
[FIGCAPTION[
[14] [[RFC 6265]] における [CODE(HTTP)@en[[[HttpOnly]]]] [[属性]]の構文
]FIGCAPTION]

[PRE(ABNF code)[
 httponly-av       = "HttpOnly"
]PRE]
]FIG]

* 処理モデル

[21] [[属性値]]はあっても無視されます [SRC[>>20]]。

;; [24] [CODE(HTTP)@en[[[Set-Cookie:]]]] も参照。

* 歴史

[9] 
[CITE@en-us[Mitigating Cross-site Scripting With HTTP-only Cookies]] ([CODE[2007-01-18 14:03:44 +09:00]] 版) <http://msdn.microsoft.com/workshop/author/dhtml/httponly_cookies.asp>

[8] 
[CITE[httpOnly cookie flag support in PHP 5.2 - iBlog - Ilia Alshanetsky]] ([CODE[2007-01-18 14:04:40 +09:00]] 版) <http://ilia.ws/archives/121-httpOnly-cookie-flag-support-in-PHP-5.2.html>

[7] 
[CITE[Bug 178993 &#8211; MSIE-extension: HttpOnly cookie attribute for cross-site scripting vulnerability prevention]] ([CODE[2007-01-18 14:05:01 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=178993>

[6] 
[CITE[robubu &#187; Blog Archive &#187; HttpOnly please]] ([TIME[2007-01-18 14:02:56 +09:00]] 版) <http://robubu.com/?p=15>

[2] [CITE[HTTPOnly Fix In MSXML ha.ckers.org web application security lab]] ([TIME[2008-11-21 17:47:39 +09:00]] 版) <http://ha.ckers.org/blog/20081111/httponly-fix-in-msxml/>

[3] [CITE[Bug 380418 – XMLHttpRequest allows reading HTTPOnly cookies]] ([TIME[2008-11-21 17:49:08 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=380418>

[4] [CITE@en[(X)HTML5 Tracking]] ([TIME[2008-12-02 19:46:38 +09:00]] 版) <http://html5.org/tools/web-apps-tracker?from=2516&to=2517>

[5] [CITE[Scope of HTTPOnly Cookies]] ([TIME[2008-12-15 19:00:11 +09:00]] 版) <http://docs.google.com/View?docid=dxxqgkd_0cvcqhsdw>

** ietf-httponly

[12] [CODE(HTTP)@en[[[HTTPOnly]]]] [[属性]]の標準化のために [DFN[[[ietf-httponly-wg]]]]
[[メイリング・リスト]]が2008年秋に作られました。名前に「[[IETF]]」
と入っていますが、正式な [[IETF]] の [[WG]] ではありませんでした。
その後すぐに [[Cookie]] 全体の標準化の機運が高まり、 [[http-state]]
[[IETF]] [[WG]] に合流しました。

[1] [CITE[ietf-httponly-wg | Google グループ]] ([TIME[2008-11-21 17:43:26 +09:00]] 版) <http://groups.google.com/group/ietf-httponly-wg?pli=1>

[CITE[This list has moved to IETF - ietf-httponly-wg | Google グループ]] ([TIME[2010-08-01 13:59:31 +09:00]] 版) <http://groups.google.com/group/ietf-httponly-wg/browse_thread/thread/59186b46f47371a1>

** HTML5 の旧規定

[10] [[HTML5]] は [CODE(JS)@en[[[document.cookie]]]] [[属性]]の規定のなかで、
「[[HTTPのみのクッキー]]」は返す値に含まないし、上書きすることもできないとしています。
ただし、注記 ([[参考]]) の中で、 [[HTML5]] 仕様書執筆時点で「[[HTTPのみのクッキー]]」
に関する仕様書は存在しておらず、何が「[[HTTPのみのクッキー]]」であるかは定義しない、
としています。その注記の中では一部 [[Webブラウザー]]で [CODE(HTTP)@en[[[httponly]]]] [[引数]]による
「[[HTTPのみのクッキー]]」の機能が実装されていることにも触れられています。

* メモ

[11] [CITE@en[mod_rewrite - Apache HTTP Server]]
([TIME[2009-10-04 03:10:27 +09:00]] 版)
<http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#RewriteRule>

[30] [CITE[Proposal for httpOnly cookies access via NPAPI]]
([TIME[2012-06-04 22:14:52 +09:00]] 版)
<https://mail.mozilla.org/pipermail/plugin-futures/2012-June/000525.html>

[31] [CITE[Proposal for httpOnly cookies access via NPAPI]]
([TIME[2012-06-04 22:51:09 +09:00]] 版)
<https://mail.mozilla.org/pipermail/plugin-futures/2012-June/000526.html>

[32] [CITE@en[NPAPI:HttpOnlyCookies - MozillaWiki]]
([TIME[2015-05-01 19:04:11 +09:00]] 版)
<https://wiki.mozilla.org/NPAPI:HttpOnlyCookies>

[34] [CITE@en[(X)HTML5 Tracking]]
([TIME[2010-02-01 21:41:28 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4639&to=4640>

[FIG(quote)[
[FIGCAPTION[
[35] [CITE@en[NPAPI:HttpOnlyCookies - MozillaWiki]]
([TIME[2017-04-27 11:34:57 +09:00]])
<https://wiki.mozilla.org/NPAPI:HttpOnlyCookies>
]FIGCAPTION]

> Note: Internet Explorer (IE) provides access to HTTPonly cookies in plugins (See Microsoft API: InternetSetCookieEx and InternetGetCookieEx) . NPAPI-plugins should be on par.

]FIG]

[36] [[ChromeDriver]] は [CODE[httpOnly]] を設定して [[Add Cookie]]
を実行しても、無視されて普通の[[クッキー]]になってしまいます。[TIME[2017-05-18T06:15:19.100Z]]



[37] [CITE@en[Clearly indicate that webdriver can access HttpOnly cookies]]
([[shs96c]]著, [TIME[2017-08-03 19:40:27 +09:00]])
<https://github.com/w3c/webdriver/commit/73ae1efefb7c143c41e5ba521206d35aa4a22b24>

[38] [CITE@en["All associated cookies" must include http-only cookies. · Issue #971 · w3c/webdriver]]
([TIME[2017-08-10 18:15:36 +09:00]])
<https://github.com/w3c/webdriver/issues/971>

[39] [CITE@en[Clearly indicate that webdriver can access HttpOnly cookies by shs96c · Pull Request #994 · w3c/webdriver]]
([TIME[2017-08-10 18:15:58 +09:00]])
<https://github.com/w3c/webdriver/pull/994>

[40] [CITE[Actions required to mitigate Speculative Side-Channel Attack techniques - The Chromium Projects]]
([TIME[2018-01-09 10:37:14 +09:00]])
<https://www.chromium.org/Home/chromium-security/ssca>

[41] [CITE@en[Meltdown/Spectre  |  Web  |  Google Developers]]
([TIME[2018-02-08 00:05:08 +09:00]])
<https://developers.google.com/web/updates/2018/02/meltdown-spectre>