Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Chrome80のSameSiteの影響で3Dセキュア等を利用する場合に購入に失敗する #4457

Closed
Yangsin opened this issue Feb 4, 2020 · 6 comments · Fixed by #4519
Milestone

Comments

@Yangsin
Copy link

Yangsin commented Feb 4, 2020

概要(Overview)

Chrome80から導入されるSameSiteの影響で、3Dセキュア等を利用した決済でエラーとなる

原因)
外部ドメインからEC-CUEBサイトのドメインにPOSTで遷移したときに、
「EC-CUBEサイトで設定したCookie」がEC-CUBEサイトのサーバーに送信されないため。

例えば、リンク型や3Dセキュアなどで外部のページから、EC-CUBEサイトへ帰ってくる時に
期待するCookieが送信されなくなり、エラーとなる。

実際に、EC-CUBE2~4すべてにおいて以下のような事象が発生する可能性がある。
(EC-CUBEのセッション情報のCookieが送信されないため)
 ・決済完了画面が表示される、エラーとなる。
 ・決済完了画面は表示されるが、ログアウトされた状態となる。
 ・決済完了画面は表示されるが、カートの中身がクリアされない。
  etc

期待する内容(Expect) or 要望 (Requirement)

3Dセキュアなどでも正常に購入される

再現手順(Procedure)

Chrome79でも以下の2つの設定を(chrome://flags)でEnableにすることで
確認することができます。
  SameSite by default cookies
  Cookies without SameSite must be secure
ただし、Cookieが生成されてから2分間は救済措置により影響は発生しません。
(ログインしてから2分以上、十分に時間を空けてから確認する必要があります。)

すでに、ベリトランス様より、事象の確認を報告いただいております。

関連情報 (Ref)

 ・新しい Cookie 設定 SameSite=None; Secure の準備を始めましょう
  https://developers-jp.googleblog.com/2019/11/cookie-samesitenone-secure.html
 ・SameSite Frequently Asked Questions (FAQ)
  https://www.chromium.org/updates/same-site/faq
 ・Cookies default to SameSite=Lax - Chrome Platform Status
  https://www.chromestatus.com/feature/5088147346030592
 ・SameSite cookies explained - wev.dev
  https://web.dev/samesite-cookies-explained/
 ・SameSite cookie recipes - web.dev
  https://web.dev/samesite-cookie-recipes/
 ・Chrome 80が密かに呼び寄せる地獄 ~ SameSite属性のデフォルト変更を調べてみた
  https://qiita.com/ahera/items/0c8276da6b0bed2b580c
 ・Effect on customer websites and Microsoft services and products in Chrome version 80 or later
  https://docs.microsoft.com/en-us/office365/troubleshoot/miscellaneous/chrome-behavior-affects-applications

@nanasess
Copy link
Contributor

nanasess commented Feb 4, 2020

自前で対応するには、この修正が必要と思われる

https://github.com/symfony/symfony/pull/28168/files#diff-d29419a0d7043fce54a98005c26a82aa

@chihiro-adachi
Copy link
Contributor

chihiro-adachi commented Feb 4, 2020

FLY)PHP7.3〜であれば、session.cookie_samesiteの値を設定することで回避可能。

symfony/symfony#35520
https://www.php.net/manual/ja/session.configuration.php#ini.session.cookie-samesite

@nanasess
Copy link
Contributor

nanasess commented Feb 5, 2020

SameSite=None を設定したクッキーと設定していないクッキーを両方書き込む ことで、 Safari のバグを非対応UAを回避可能と思われる
https://www.flywheel.jp/blog/cookie-and-privacy/

追記) Safari が 2016 SameSite standard を厳密に実装した結果でバグでは無い模様

@nanasess
Copy link
Contributor

nanasess commented Feb 5, 2020

非対応の UA にマッチする正規表現
https://bugs.webkit.org/show_bug.cgi?id=198181#c24

@Yangsin Yangsin added this to the 4.0.4 milestone Feb 6, 2020
@nanasess
Copy link
Contributor

nanasess commented Feb 7, 2020

macOS Mojave 10.14.6, Safari バージョン12.1.2 (14607.3.9)、iOS12.4(simulator), iOS12.0(simulator) で SameSite=None にして検証していますが、 Strict と見なされるような動きはせず、再現しない模様

@nanasess
Copy link
Contributor

FLY)PHP7.3〜であれば、session.cookie_samesiteの値を設定することで回避可能。

#4519 にて対応していますが、 ini_set() にてsession.cookie_path 及び session.cookie_samesite を設定することで、動的に値を設定できます。

例)

// SameSite=None 非対応ブラウザのパターンを生成する
$patterns = [
   '/^.*iPhone; CPU iPhone OS 1[0-2].*$/',
   '/^.*iPad; CPU OS 1[0-2].*$/',
   '/^.*iPod touch; CPU iPhone OS 1[0-2].*$/',
   '/^.*Macintosh; Intel Mac OS X.*Version\/1[0-2].*Safari.*$/',
];
$isUnsupported = array_filter($patterns, function ($pattern) {
    return preg_match($pattern, $_SERVER['HTTP_USER_AGENT']);
});

if ($isUnsupported) {
    // Safari12など、非対応ブラウザ
    ini_set('session.cookie_path', '/');
} else {
    if (PHP_VERSION_ID >= 70300) { // PHP7.3以降
        ini_set('session.cookie_path', '/');
        ini_set('session.cookie_samesite' , 'none');
    } else { // PHP7.2以前(session.cookie_samesite は設定しない)
        ini_set('session.cookie_path', '/; SameSite=None');
    }
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants