cookie の HttpOnly について必要最低限の覚書

2018-03-17

そもそも cookie とは何かということについては以下などを見るとして、

HTTP cookie - Wikipedia

簡単に言うと、ブラウザからのリクエストに対し、web サーバがレスポンスヘッダで

Set-Cookie: name1=value1

などを含めて返すと、ブラウザは、name1 というクッキーの値 value1 を記憶し、次に再び同じ web サーバに何かをリクエストするときには、それを

Cookie: name1=value1

などとして送出する。

ところで cookie の値は、前述のように web サーバに送り返すだけでなく、そのままではブラウザ上の JavaScript からも読み取ることができる。
特に cookie に、いわゆるセッション ID を持たせていた場合、それを許すと、万一 XSS 脆弱性があった場合に、セッションを乗っ取られる危険性がある。

そこで、Set-Cookie するときに、HttpOnly というものを指定しておくと、その cookie は、JavaScript から読み取ることが出来なくなる。

Set-Cookie: name1=value1; HttpOnly

いわゆるセッション ID を持たせている場合、HttpOnly を指定しておくべきである。

参考

IPA ISEC セキュア・プログラミング講座:Webアプリケーション編 第4章 セッション対策:セッション乗っ取り:#1 セッションIDとセッションID侵害手口
『CookieによるセッションIDの搬送』 の所に、 「原則としてhttponly属性を指定する」 とある。
Cookie の仕様とセキュリティ httponly
「Session ID などのように JavaScript から読み取る必要がないクッキーには HttpOnly を忘れずに付けておいたほうが良いでしょう。」
HTTP Cookie - HTTP | MDN セキュア Cookie と HttpOnly Cookie
「特に、セッションを定義するためだけに使用している Cookie は JavaScript で使用する必要性がありませんので、HttpOnly フラグを設定するべきです。」

以上


index