如何解决“将SameSite Cookie设置为无”警告?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=None和,则仅会提供带有跨站点请求的cookie Secure。您可以在“应用程序”>“存储”>“ Cookies”下的开发人员工具中查看Cookie,并在https://www.chromestatus.com/feature/5088147346030592https://www.chromestatus.com/feature/5633521622188032上查看更多详细信息。

我试图创建这样的cookie,但没有帮助。

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

按照问题的说明进行操作。


我猜它也说“安全”,意思是https。
wOxxOm

您可以按照以下示例解决此问题:stackoverflow.com/a/58723552/6215447
Code Cooker,

您可以使用第三方库来管理PHP 5.4+上的cookie,并提供一个setcookie带有附加参数的替换$sameSite。该参数可以是NoneLaxStrict。OOP接口也可用。
CAW

Answers:


24

我也为此感到“反复无常”,但是Google Chrome Labs的Github的这个回答对我有所帮助。我将其定义到我的主文件中,并且仅在一个第三方域中有效。仍在进行测试,但我渴望通过更好的解决方案来更新此答案:)

如果您的PHP直到7.2,如我的服务器那样:

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

或者,如果您的主机已经更新到7.3,则可以使用:

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

您可以尝试检查Cookie的另一件事是启用下面的标志,用自己的话说,“将为可能受到此更改影响的每个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

1
可悲的是,int并不是本地主机的问题,我也在网上遇到此警告。我会说这是贝宝方面的事情……
LuBre

嗯...我认为@vir我们在下面的评论很适合您的问题,也许PayPal对此不太关注:P
Dimas Pante

1
感谢您提供新的php 7.3语法-解决了我的问题
Billynoah

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

好的,这是此页面上唯一实际有效且正在生产中的答案:D
罗伯特·格林

1
从文档中,阵列键应使用小写字母:link
最差

1
这在php 5和joomla和chrome中对我有用!
海顿登场

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)时,我注意到“始终”情况在某些情况下无法在相同的响应头池中起作用。因此,不使用“ always”是对PHP有用的方法,但是文档建议,如果您想覆盖所有基础,则可以添加带有“ always”和不带有“ always”的指令。我还没有测试过。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.