自分の知識の再整理も含めてまとめる
CookieのSecure属性とは
MDN曰く以下のような説明になっている
Secure 属性がついた Cookie は HTTPS プロトコル上の暗号化されたリクエストでのみサーバーに送信され、安全でない 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セキュアソリューションズ株式会社