ホーム »

ビジネスブログ

2020年8月27日

Zen Cart:Google Chrome SameSite Cookie対応について

投稿者 竹村

sample.pngのサムネイル画像

2020年 2月頃にGoogleがブラウザChromeて、CookieのSameSiteのデフォルトの挙動を「None」から「Lax」に変更するということで、当時急いで修正したのが記憶に新しいですが、その後、新型コロナの影響で適用を延ばすということで、しばらくは問題もなく過ぎていきました。

最近、7月中旬からこの対応を含んだアップデートが提供されたようで、影響が出てきています。Zen Cartにおいて顕著にこの対応が影響するのは、外部サイトと連携する部分、つまりクレジットカード決済です。

Zen Cartで注文する直前まで進めてクレジットカード決済で、カード決済会社の画面でクレジットカード情報を入力し、戻ってくると「タイムアウト」になってしまう。そういう現象が発生しています。

原因

Zen CartのセッションはデフォルトでCookieにセッションIDを保存しています。よって、Cookieが取れなくなると自動的にログアウト扱いになるので「タイムアウト」画面が表示されます。

SameSite=Laxでは、「外部サイトがPOSTする場合、Cookieヘッダーは渡らない」仕様になっています。よって、SameSiteの影響を受けるかどうかは外部サイトがPOSTをしてZen Cartに戻ってくる場合に限ります。

注意点:SameSiteのiOS12/MacOS10.14対応

iOS12より前の機種と、MacOS 10.14より前の場合に「SameSite=None」が設定されていると「SameSite=Strict」扱いになってしまい、外部サイト連携ができなくなります。よって、$__SERVER['HTTP_USER_AGENT']で判定をして、該当の場合はSameSite属性を発行しないようにします。

対応:cookie_testに注意!

  • ショップをSSL化してクッキーのSecure属性をTrueにする
  • セッション用に使うクッキーのSameSite=Noneをする
  • cookie_test というクッキーのSameSite=Noneをする

※3つ目に気づかずにハマりました。Zen CartではCookieが有効かどうかを判断するのにcookie_testというCookieを発行していますが、これにもSameSite対応をする必要があります。

  • includes/init_includes/init_sessions.php (もしくは includes/init_includes/overrides/init_sessions.php)にて、パスにSameSite対応をしてSecureにする
    $path = str_replace('\\', '/', dirname($_SERVER['SCRIPT_NAME']));
    if (defined('SESSION_USE_ROOT_COOKIE_PATH') && SESSION_USE_ROOT_COOKIE_PATH == 'True') $path = '/';
    $path = (defined('CUSTOM_COOKIE_PATH')) ? CUSTOM_COOKIE_PATH : $path;
    $domainPrefix = (!defined('SESSION_ADD_PERIOD_PREFIX') || SESSION_ADD_PERIOD_PREFIX == 'True') ? '.' : '';
    $secureFlag = ((ENABLE_SSL 'true' && substr(HTTP_SERVER, 0, 6) 'https:' && substr(HTTPS_SERVER, 0, 6) 'https:') || (ENABLE_SSL 'false' && substr(HTTP_SERVER, 0, 6) == 'https:')) ? TRUE : FALSE;

    // 関数追加
    function is_before_iOS12() {
    // iOS12より前かどうか
    if (preg_match('@iPhone; CPU iPhone OS (1[0-2]|[0-9][^0-9])@', $_SERVER['HTTP_USER_AGENT'])) { return true; }
    if (preg_match('@iPad; CPU OS (1[0-2]|[0-9][^0-9])@', $_SERVER['HTTP_USER_AGENT'])) { return true; }
    if (preg_match('@iPod touch; CPU iPhone OS (1[0-2]|[0-9][^0-9])@', $_SERVER['HTTP_USER_AGENT'])) { return true; }
    // MacOS 10.14より前かどうか
    if (preg_match('@Macintosh; Intel Mac OS X 10_(1[0-4]|[0-9][^0-9]).*Safari@', $_SERVER['HTTP_USER_AGENT'])) { return true; }
    return false;
    }


    // 下記1行を追記
    $path .= is_before_iOS12() ? '' : '; SameSite=None';

    if (PHP_VERSION >= '5.2.0') {
    session_set_cookie_params(0, $path, (zen_not_null($cookieDomain) ? $domainPrefix . $cookieDomain : ''), $secureFlag, TRUE);
    } else {
    session_set_cookie_params(0, $path, (zen_not_null($cookieDomain) ? $domainPrefix . $cookieDomain : ''), $secureFlag);
    }

    (中略)

    zen_setcookie('cookie_test', 'please_accept_for_session', time()+60*60*24*30, '/', (zen_not_null($current_domain) ? $current_domain : ''));
      ↓
    zen_setcookie('cookie_test', 'please_accept_for_session', time()+60*60*24*30, '/'. is_before_iOS12() ? '' : '; SameSite=None', (zen_not_null($current_domain) ? $current_domain : ''), $secureFlag);

この問題への対処でお困りのことがあれば、ご相談ください(有償対応となります)。

 

カテゴリー:Zen Cart(オンラインショップ構築)

2020年8月 6日

夏季休業(8月11日~14日)のお知らせ

株式会社アークウェブでは、以下の期間を休業とさせていただきます。 2020年8月11日(火)~14日...

投稿者 中野

2020年7月 6日

【Shopify(ショピファイ)事例】現代ギター様オンラインショップ

こんにちは、ディレクターの八木です。 この度現代ギターさまの2店舗目のオンラインショップ開店のお手伝...

投稿者 八木

2020年6月26日

画像のネイティブLazy-loadをサポートするMT7用プラグイン「MT NativeLazyLoad」をリリースしました。

こんにちは、ディレクターの八木です。 アークウェブでは、画像のネイティブLazy-loadをサポート...

投稿者 八木

2020年6月 1日

新型コロナ禍に対応し、基本はリモートワーク体制を取っています(2020年6月1日)

株式会社アークウェブは、2020年6月1日(月)以降、新型コロナウイルスの感染抑制のため、以下の体制...

投稿者 中野

2020年2月17日

A-シリーズ動作確認完了のお知らせ MT6.5.3 / MT6.3.11 / MT7 r. 4605 / Movable Type Premium 1.27 の提供開始

いつもA-シリーズをご利用いただきありがとうございます。 2020年2月6日にリリースされた Mov...

投稿者 ARK-Web

2020年1月28日

MTプラグイン新版リリースのお知らせ:A-Form PC 4.0.3/3.8.11, A-Form PC/Mobile 3.8.11, A-Member 4.0.3/3.8.11, A-Reserve 4.0.3/3.8.11

株式会社アークウェブは本日(2020年1月27日)、Movable Type(ソフトウェア版・クラウ...

投稿者 中野

2019年12月25日

お問い合わせ種別ごとに異なるSlackチャンネルに通知を送る【A-Form Advent Calendar 2019/12/25】

問い合わせ種別ごとに異なるSlackチャンネルに通知を投げ分ける機能を、ノン・プログラム、IFTTTやZapier等の外部サービス不要で、A-Formと、Slack公式アプリだけを使ってわずか10分程で実現する方法でご紹介します。

投稿者 八木

2019年12月24日

アークウェブがプラグインを社会貢献団体・東日本大震災被災者に無償提供している理由

中野です。この記事は A-Form Advent Calendar 2019 参加記事です。 A-F...

投稿者 中野

 

Movable Type用高機能メールフォーム生成プラグイン A-Formの詳細へ
Movable Type用会員限定サイトプラグイン A-Memberの詳細へ
Movable Type用予約サイト構築プラグイン A-Reserveの詳細へ
ARK-Web×CSR(企業の社会的責任)

アークウェブの本

Zen Cartによるオンラインショップ構築・運用テクニック―オープンソース徹底活用

Zen Cartによるオンラインショップ構築・運用テクニック―オープンソース徹底活用

内容充実のZen Cart公式本(v1.3対応)がついに発表です。アークウェブのスタッフをはじめZen-Cart.JPの中心メンバーが共著で執筆しました。続きを読む

Movable Type プロフェッショナル・スタイル

Movable Type プロフェッショナル・スタイル

ビジネスサイト構築におけるCMSとしてのMTの活用方法について、豪華執筆陣による実践的MT本です。八木が共著で執筆しました。続きを読む

Web屋の本

Web屋の本

Web 2.0時代の企業サイトの構築・運用などの戦略を考える「Web屋の本」 (技術評論社)を、中野・安藤が執筆しました。続きを読む

新着はてブ

Loading

アーカイブ

応援しています

  • キッズ・セーバー
  • ソロモン・リリーフ ─ソロモン諸島を応援する有志による、震災復興支援プロジェクト─

    (終了しました)

RSS配信

 

サービスおよびソリューション一覧


最新情報・投稿をチェック


このページのトップに戻る

Photo by A is for Angie

Powered by Movable Type Pro 6.3.8