Como corrigir o aviso "definir cookie SameSite como nenhum"? Extensão do Chrome

41

Criei uma extensão chrome e, a partir do popup.js, chamei o script PHP (Using Xhttprequest) que lê o cookie. Como isso:

$cookie_name = "mycookie";

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

Mas estou recebendo esse aviso em erros nas extensões.

Um cookie associado a um recurso entre sites em (Aqui está o meu domínio) foi definido sem o SameSiteatributo Uma versão futura do Chrome só entregará cookies com solicitações entre sites se eles estiverem configurados com SameSite=Nonee Secure. Você pode revisar os cookies nas ferramentas do desenvolvedor em Aplicativo> Armazenamento> Cookies e ver mais detalhes em https://www.chromestatus.com/feature/5088147346030592 e https://www.chromestatus.com/feature/5633521622188032 .

Tentei criar um cookie como este, mas não ajudou.

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

Seguindo as instruções desta pergunta.

Danilo Ivanovic
fonte
Ele também diz "Seguro", o que significa https, eu acho.
wOxxOm 02/10/19
você pode seguir este exemplo para resolver esse problema: stackoverflow.com/a/58723552/6215447
Code Cooker
Você pode usar uma biblioteca de terceiros para gerenciar cookies no PHP 5.4+, fornecendo uma setcookiesubstituição que requer um argumento adicional $sameSite. O argumento pode ser None, Laxou Strict. Uma interface OOP também está disponível.
caw 02/02

Respostas:

24

Também estou em "tentativa e erro" por isso, mas esta resposta do Github do Google Chrome Labs me ajudou um pouco. Eu o defini no meu arquivo principal e funcionou - bem, apenas para um domínio de terceiros. Ainda estou fazendo testes, mas estou ansioso para atualizar esta resposta com uma solução melhor :)

Se você tiver PHP até 7.2, como meu servidor:

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

Ou, se o seu host já estiver atualizado para 7.3, você pode usar:

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

Outra coisa que você pode tentar verificar os cookies é ativar a bandeira abaixo, que - em suas próprias palavras - "adicionará mensagens de aviso do console para cada cookie potencialmente afetado por essa alteração":

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

Veja o código completo em: https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md , eles também têm o código same-site-cookies.

Dimas Pante
fonte
Estou usando o PHP 7.3 e tentei ambos (header e setcookie), mas ainda recebo o aviso SameSite quando carrego uma página com um script do PayPal ... Ainda estou no host local, isso faz alguma diferença?
LuBre 10/02
@LuBre Hmm poderia ser. Ainda não testei assim, mas faz sentido. Além disso, seu host local tem SSL?
Dimas Pante
11
Infelizmente, int não é um problema de host local, também recebo esse aviso online. Eu diria que é algo do lado do Paypal ...
LuBre 03/03
Hmm bem ... acho que o @vir nos comenta abaixo se encaixa no seu problema, provavelmente o PayPal ainda não está muito preocupado com isso: P
Dimas Pante
11
obrigado por fornecer a nova sintaxe do php 7.3 - que corrigiu meu problema
billynoah 13/03
24

À medida que o novo recurso chega, os SameSite=Nonecookies também devem ser marcados como Secureou serão rejeitados.

Pode-se encontrar mais informações sobre a alteração nas atualizações de cromo e nesta postagem do blog

Nota : não está diretamente relacionado diretamente à pergunta, mas pode ser útil para outras pessoas que chegaram aqui, já que foi minha preocupação durante o desenvolvimento do meu site:

se você estiver vendo o aviso da pergunta que lista alguns sites de terceiros (no meu caso, era google.com, hein) - isso significa que eles precisam corrigi-lo e isso não tem nada a ver com o seu site. Obviamente, a menos que o aviso mencione seu site, nesse caso, a adição Securedeve corrigi-lo.

vírus
fonte
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>";
Robert Greene
fonte
11
Adicione um pedaço de informação descritiva sobre a sua resposta
Lizesh Shakya 17/03
ok, é a única resposta nesta página que realmente funciona e está trabalhando em produção: D
Robert Greene
11
No documento, as chaves da matriz devem estar em minúsculas: link
Pior
11
Isso funcionou para mim em php 5 e joomla e chrome!
Hayden Thring 03/04
1

Acabei corrigindo nossa instalação do Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2 para o Chrome 80 instalando mod_headers:

a2enmod headers

Adicionando a seguinte diretiva às nossas configurações do Apache VirtualHost:

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

E reiniciando o Apache:

service apache2 restart

Ao revisar os documentos ( http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html ), notei que a condição "sempre" tem certas situações em que não funciona no mesmo conjunto de cabeçalhos de resposta. Portanto, não usar "sempre" é o que funcionou para mim com PHP, mas os documentos sugerem que se você quiser cobrir todas as suas bases, poderá adicionar a diretiva com e sem "sempre". Eu não testei isso.

Ethan Burnside
fonte