¿Cómo corregir la advertencia de "establecer la cookie de SameSite en ninguna"? Extensión de cromo

41

Creé una extensión de Chrome y desde popup.js llamé al script PHP (Uso de Xhttprequest) que lee la cookie. Me gusta esto:

$cookie_name = "mycookie";

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

Pero recibo esta advertencia por errores en las extensiones.

Se configuró una cookie asociada con un recurso entre sitios en (Aquí está mi dominio) sin el SameSiteatributo. Una versión futura de Chrome solo entregará cookies con solicitudes entre sitios si están configuradas con SameSite=Noney Secure. Puede revisar las cookies en las herramientas de desarrollador en Aplicación> Almacenamiento> Cookies y ver más detalles en https://www.chromestatus.com/feature/5088147346030592 y https://www.chromestatus.com/feature/5633521622188032 .

Traté de crear una cookie como esta, pero no me ayudó.

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

Siguiendo las instrucciones de esta pregunta.

Danilo Ivanovic
fuente
También dice "Seguro", que significa https, supongo.
wOxxOm
puede seguir este ejemplo para resolver este problema: stackoverflow.com/a/58723552/6215447
Code Cooker el
Puede usar una biblioteca de terceros para administrar cookies en PHP 5.4+, proporcionando un setcookiereemplazo que requiere un argumento adicional $sameSite. El argumento puede ser None, Laxo Strict. Una interfaz OOP también está disponible.
caw

Respuestas:

24

También estoy en una "prueba y error" para eso, pero esta respuesta de Github de Google Chrome Labs me ayudó un poco. Lo definí en mi archivo principal y funcionó, bueno, solo para un dominio de terceros. Todavía estoy haciendo pruebas, pero estoy ansioso por actualizar esta respuesta con una mejor solución :)

Si tiene PHP hasta 7.2, como lo hace mi servidor:

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

O si su host ya está actualizado a 7.3, puede usar:

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

Otra cosa que puede probar para verificar las cookies es habilitar el indicador a continuación, que, en sus propias palabras, "agregará mensajes de advertencia de la consola para cada cookie potencialmente afectada por este cambio":

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

Vea el código completo en: https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md , también tienen el código same-site-cookies.

Dimas Pante
fuente
Estoy usando PHP 7.3 y utilicé ambos (encabezado y setcookie) pero sigo recibiendo la advertencia SameSite cuando cargo una página con un script de PayPal ... Sin embargo, todavía estoy en localhost, ¿hay alguna diferencia?
LuBre
@LuBre Hmm podría ser. Todavía no he probado así, pero tiene sentido. Además, ¿su host local tiene SSL?
Dimas Pante
1
Lamentablemente, int no es un problema localhost, también experimento esta advertencia en línea. Yo diría que es algo del lado de Paypal ...
LuBre
Hmm, bueno ... creo que el comentario de @vir us a continuación se ajusta a su problema, probablemente PayPal aún no está muy preocupado por eso: P
Dimas Pante
1
gracias por proporcionar la nueva sintaxis de php 7.3 - eso solucionó mi problema
billynoah
24

Cuando llegue la nueva función, las SameSite=Nonecookies también deben marcarse como Secureo serán rechazadas.

Se puede encontrar más información sobre el cambio en las actualizaciones de cromo y en esta publicación de blog

Nota : no está directamente relacionado con la pregunta, pero podría ser útil para otros que llegaron aquí, ya que fue mi preocupación al principio durante el desarrollo de mi sitio web:

si está viendo la advertencia de la pregunta que enumera algunos sitios de terceros (en mi caso fue google.com, ¿eh?), eso significa que deben solucionarlo y no tiene nada que ver con su sitio. Por supuesto, a menos que la advertencia mencione su sitio, en cuyo caso agregar Securedebería solucionarlo.

virus
fuente
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
fuente
1
Agregue una información descriptiva sobre su respuesta
Lizesh Shakya
ok es la única respuesta en esta página que realmente funciona y está trabajando en producción: D
Robert Greene
1
Desde el documento, las claves de la matriz deben estar en minúsculas: enlace
Peor
1
¡Esto funcionó para mí en php 5 y joomla y chrome!
Hayden Thring
1

Terminé arreglando nuestra instalación de Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2 para Chrome 80 instalando mod_headers:

a2enmod headers

Agregar la siguiente directiva a nuestras configuraciones de Apache VirtualHost:

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

Y reiniciando Apache:

service apache2 restart

Al revisar los documentos ( http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html ) noté que la condición "siempre" tiene ciertas situaciones en las que no funciona desde el mismo grupo de encabezados de respuesta. Por lo tanto, no usar "siempre" es lo que funcionó para mí con PHP, pero los documentos sugieren que si desea cubrir todas sus bases, puede agregar la directiva con y sin "siempre". No he probado eso.

Ethan Burnside
fuente