「SameSite cookieをnoneに設定する」警告を修正するにはどうすればよいですか?Chrome拡張機能


41

私はChrome拡張機能を作成し、popup.jsからCookieを読み取るPHPスクリプト(Xhttprequestを使用)を呼び出しました。このような:

$cookie_name = "mycookie";

if(isset($_COOKIE[$cookie_name]))
{
    echo $_COOKIE[$cookie_name];
}
else{
    echo "nocookie";
}

しかし、私は拡張機能のエラーでこの警告を受けています。

(これは私のドメインです)のクロスサイトリソースに関連付けられたCookieがSameSite属性なしで設定されました。Chromeの将来のリリースでは、とが設定されている場合にのみ、クロスサイトリクエストでCookieを配信SameSite=NoneSecureます。開発者ツールのApplication> Storage> CookiesでCookieを確認し、https://www.chromestatus.com/feature/5088147346030592およびhttps://www.chromestatus.com/feature/5633521622188032で詳細を確認できます

このようなCookieを作成しようとしましたが、役に立ちませんでした。

setcookie($cookie_name,$cookie_value, time() + 3600*24, "/;samesite=None ","mydomain.com", 1);

この質問の指示に従ってください。


また、httpsを意味する「セキュア」とも表示されます。
wOxxOm

この例を実行してこの問題を解決できます。stackoverflow.com
Code Cooker

サードパーティのライブラリを使用して PHP 5.4以降でCookieを管理しsetcookie、追加の引数を取る置換を提供できます$sameSite。引数はNoneLaxまたはStrictです。OOPインターフェースも利用できます。
CAW

回答:


24

私もそのため「試行錯誤」していますが、Google Chrome LabsのGithubからのこの回答が少し役に立ちました。私はそれをメインファイルに定義し、それが機能しました。まだテストを行っていますが、私はこの答えをより良い解決策で更新したいと思っています:)

私のサーバーのように、7.2までのPHPを使用している場合:

header('Set-Cookie: cross-site-cookie=name; SameSite=None; Secure');

または、ホストがすでに7.3に更新されている場合は、以下を使用できます。

setcookie('cross-site-cookie', 'name', ['samesite' => 'None', 'secure' => true]);

Cookieを確認するもう1つの方法は、以下のフラグを有効にすることです。これにより、「この変更の影響を受ける可能性のあるすべてのCookieごとにコンソール警告メッセージが追加されます」。

chrome://flags/#cookie-deprecation-messages

https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.mdでコード全体を参照してくださいsame-site-cookies。コードも用意されています。


私はPHP 7.3を使用していて、両方(ヘッダーとsetcookie)を試しましたが、PayPalスクリプトを使用してページをロードすると、SameSite警告が表示されます...それでもlocalhostにいますが、違いはありますか?
LuBre

@LuBreうーん。私はまだこのようにテストしていませんが、理にかなっています。また、ローカルホストにはSSLがありますか?
Dimas Pante

1
残念ながら、intはlocalhostの問題ではありません。この警告はオンラインでも発生します。Paypal側の問題だと思います...
LuBre

うーん...下記の@virのコメントはあなたの問題に当てはまると思います。おそらくPayPalはまだそれほど心配していません:P
Dimas Pante

1
新しいphp 7.3構文を提供してくれてありがとう
これで

24

新機能が登場するとき、SameSite=NoneCookieもとしてマークする必要がありますSecure。そうしないと、拒否されます。

クロムの更新とこのブログ投稿の変更に関する詳細情報を見つけることができます

:質問とは直接関連していませんが、私のウェブサイトの開発中の最初の私の懸念であったため、ここに上陸した他のユーザーにとって役立つ場合があります。

いくつかのサードパーティのサイト(私の場合はgoogle.comでした)をリストする質問の警告が表示された場合、それは彼らがそれを修正する必要があり、あなたのサイトとは何の関係もないことを意味します。もちろん、警告があなたのサイトに言及していない限り、追加Secureすることでそれを修正する必要があります。


6
>= PHP 7.3

setcookie('key', 'value', ['samesite' => 'None', 'secure' => true]);

< PHP 7.3

exploit the path
setcookie('key', 'value', time()+(7*24*3600), "/; SameSite=None; Secure");

Emitting javascript

echo "<script>document.cookie('key=value; SameSite=None; Secure');</script>";

1
回答についての説明情報の一部を追加します
Lizesh Shakya

[OK]を実際に動作し、生産に取り組んでいるこのページ上の唯一の答え:D
ロバート・グリーン

1
ドキュメントから、配列のキーは小文字である必要があります:link
最悪の

1
これはphp 5とjoomlaとchromeで私のために働きました!
Hayden Thring

1

私は最終的にmod_headersをインストールして、Chrome 80のUbuntu 18.04 / Apache 2.4.29 / PHP 7.2インストールを修正しました。

a2enmod headers

Apache VirtualHost構成に次のディレクティブを追加します。

Header edit Set-Cookie ^(.*)$ "$1; Secure; SameSite=None"

そして、Apacheを再起動します。

service apache2 restart

ドキュメント(http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html)を確認したところ、「常に」の条件には、同じ応答ヘッダーのプールでは機能しない特定の状況があることに気付きました。したがって、「常に」を使用しないことは、PHPで私にとってうまくいったことですが、ドキュメントは、すべてのベースをカバーしたい場合は、「常に」の有無にかかわらずディレクティブを追加できることを示唆しています。私はそれをテストしていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.