コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

CookieのSecure属性の必要性に関してざっくりまとめる

自分の知識の再整理も含めてまとめる

CookieのSecure属性とは

MDN曰く以下のような説明になっている

Secure 属性がついた CookieHTTPS プロトコル上の暗号化されたリクエストでのみサーバーに送信され、安全でない HTTP では決して送信されないため、中間者攻撃者が簡単にアクセスすることはできません。(URL に http: を含む) 安全でないサイトは、 Secure 属性を使用して Cookie を設定することができません。 - HTTP Cookie の使用 - HTTP - Cookie へのアクセス制限 | MDN

このようにSecure属性をつけておくことでブラウザはHTTPS以外のアクセスのときには該当のCookieを送信しなくなるので、通信経路の途中でCookieを見られる心配がなくなる。

よくある間違い

HTTPSだけで構成されたサイトであればSecure属性は不要なのではないか?

上記で書いたように、中間者攻撃への対策が主体なので「HTTPSだけで構成されたサイトであればHTTPへのアクセスはないので問題はないのではないか」という誤解があるが、実はそんなことはない。

Cookieの送信自体はブラウザが行い、ドメインが同じであれば送信を行う。例えば https://watashi.example.com にてSecure属性なしで登録したCookieドメインが同じ http://watashi.example.com でも送信される。

このため、悪意のあるユーザが http://watashi.example.com へのaタグをおき、その時のRequestHeaderを監視すればかすめ取ることができてしまう。

80番ポートを塞げばいいのではないか?

上記の流れで「HTTPでのリクエスト自体が成立しなければそもそもブラウザが送らないのではないか」という話もあるが、実際はそうではなくポートが空いている空いていないに関わらずCookieが送信されるタイミングがある。詳しくは下記徳丸先生のYoutubeを参照のこと。

TCP/IPを理解している人ほど間違いやすい 常時SSLでもCookieのSecure属性が必要な理由 - EGセキュアソリューションズ株式会社

関連リンク