Overview
自分が管理しているサイトにてChromeでログインできない問題が報告され、原因を追求して発見したのですが、Chrome 56にてCookie処理の変更があったようです。
変更内容は以下の通りです。
HTTPSページでSecure Cookieを発行した場合、HTTPページで同名のCookieを上書きしない。
一般画面はHTTP、ログイン画面はHTTPSのようなHTTPとHTTPSを行き来するサイトで影響がでてきます。
問題発覚の経緯
自分のサイトではCakePHPを使用しており、HTTPSにアクセスした場合はデフォルトでSecure Cookieが発行されるようになっていました。
- SSLのログイン画面にアクセスする
- Secure CookieでSessionを発行する
- ログインする
- ログイン後、HTTPページ(トップなど)にリダイレクト
- Cookieが送信されないのでログインできていない状態になる
- 再度ログインしようと、ログイン画面にアクセスする
- Secure Cookieが送信され、ログイン済みと判断されHTTPページにリダイレクトされる
- →5ループ
他のブラウザでは、5の段階でSecureCookieを上書きし6,7の処理で再ログインできるのですが、Chrome 56の仕様でSecureCookieが上書きできなくなったためこのような現象になることが判明しました。
仕様変更の経緯
この仕様変更についてはChromiumのバグトラッカーにて議論されています。
- 2016年9月5日
- GoogleがIETFというインターネットの仕様を議論する組織に対してSecureクッキーの上書きしないように【提案】しています。
- draft-ietf-httpbis-cookie-alone-01
- 2017年1月25日
- Chrome 56リリース。提案の段階であるにもかかわらずChromeに実装されていた模様。
- 2017年1月27日
- Chromiumに反映
感想
Googleが仕様変更を先急ぎした感がかなり強いですが、こういった変更をする場合、先に告知をしていただきたいものです。
そもそもCakephpがHTTPSの場合はデフォルトでSecureCookieを発行するという仕様にも問題があると思われますが・・・。