「A cookie associated with a cross-site resource at was set without the `SameSite` attribute.」の警告が出てreCAPTCHA v2の送信ボタンの`disabled`が外れない

A cookie associated with a cross-site resource at was set without the SameSite attribute. A future release of Chrome will only deliver cookies with cross-site requests if they are set with SameSite=None and Secure. You can review cookies in developer tools under Application>Storage>Cookies and see more details at and .

という警告がChromeで表示されて、reCAPTCHA v2の送信ボタンのdisabledが外れない現象に遭遇。 検索すると、セキュリティ強化のためCookieの取り扱いが厳しくなる、とのこと(すごくざっくりとした説明)。 PHPではさしあたり上述リンクのコードで対応できるらしいのですが、reCAPTCHAのように外部から発行されるCookieの場合、setcookie関数の第二引数はどうする(第一引数は今回はgoogle.comで良いと思いますが)のか……。 まだ気付いて1時間程度なのでざっとしか調べられていませんが、ひとまずメモしておきます。

追記

以下のようなコードを試しに書いてみました(もちろんhttpsのデモサイト)が特に変化なし。

テストコード1

//Cookie Chrome > 77 等用
if(PHP_MAJOR_VERSION >= 7 && PHP_MINOR_VERSION >= 3) {
    setcookie('CONSENT', '', ['samesite' => 'None', 'secure' => true, 'httponly' => false, 'domain' => 'google.com']);
    setcookie('NID', '', ['samesite' => 'None', 'secure' => true, 'httponly' => false, 'domain' => 'google.com']);
}
else {
    header('Set-Cookie: CONSENT="";DOMAIN="google.com";Secure;SameSite=None', false);
    header('Set-Cookie: NID="";DOMAIN="google.com";Secure;SameSite=None', false);
}
上述リンクを参考に、Cookieの名前を決めて空の値でセット。

テストコード2

//Cookie Chrome > 77 等用
if(PHP_MAJOR_VERSION >= 7 && PHP_MINOR_VERSION >= 3) {
    setcookie('SIDCC', '', ['samesite' => 'None', 'secure' => true, 'domain' => '.google.com']);
}
else {
    header('Set-Cookie: SIDCC="";Domain=".google.com";secure;SameSite=None', false);
}
レスポンスヘッダを見てみる
レスポンスヘッダを見てみる
Chromeのコンソールでレスポンスを読んでName属性を変更。

テストコード3

//Cookie Chrome > 77 等用
if(PHP_MAJOR_VERSION >= 7 && PHP_MINOR_VERSION >= 3) {
    setcookie('SIDCC', '', ['samesite' => 'None', 'secure' => true, 'domain' => '.google.com']);
    setcookie('SIDCC', '', ['samesite' => 'None', 'secure' => true, 'domain' => 'csp.withgoogle.com']);
    setcookie('SIDCC', '', ['samesite' => 'None', 'secure' => true, 'domain' => 'www.gstatic.com']);
}
else {
    header('Set-Cookie: SIDCC="";Domain=".google.com";secure;SameSite=None', false);
    header('Set-Cookie: SIDCC="";Domain="csp.withgoogle.com";secure;SameSite=None', false);
    header('Set-Cookie: SIDCC="";Domain="www.gstatic.com";secure;SameSite=None', false);
}
関係しそうなドメインを全て追記。
3つ共ダメでした。 さて、どうしたものか……いっそreCAPTCHA v3に手を付けてみるとか……?でもv3はもっと頻繁にやり取りするでしょうし……うーん。

reCAPTCHA v3

参考

この記事を書いた人

アルム=バンド

フロントエンド・バックエンド・サーバエンジニア。LAMPやNodeからWP、Gulpを使ってejs,Scss,JSのコーディングまで一通り。たまにRasPiで遊んだり、趣味で開発したり。