Come risolvere l'avviso "imposta cookie di SameSite su nessuno"? Estensione di Chrome


41

Ho creato un'estensione di Chrome e da popup.js ho chiamato lo script PHP (utilizzando Xhttprequest) che legge il cookie. Come questo:

$cookie_name = "mycookie";

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

Ma ricevo questo avviso in caso di errori nelle estensioni.

Un cookie associato a una risorsa tra siti in (Here is my domain) è stato impostato senza l' SameSiteattributo. Una versione futura di Chrome fornirà i cookie con richieste tra siti solo se impostati con SameSite=Nonee Secure. Puoi esaminare i cookie negli strumenti per sviluppatori sotto Applicazione> Archiviazione> Cookie e vedere maggiori dettagli su https://www.chromestatus.com/feature/5088147346030592 e https://www.chromestatus.com/feature/5633521622188032 .

Ho provato a creare un cookie come questo ma non mi è stato di aiuto.

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

Seguendo le istruzioni di questa domanda.


Dice anche "Sicuro" che significa https, immagino.
wOxxOm

puoi seguire questo esempio per risolvere questo problema: stackoverflow.com/a/58723552/6215447
Code Cooker

Puoi utilizzare una libreria di terze parti per gestire i cookie su PHP 5.4+, fornendo una setcookiesostituzione che accetta un argomento aggiuntivo $sameSite. L'argomento può essere None, Laxo Strict. È disponibile anche un'interfaccia OOP.
Caw

Risposte:


24

Sono anche in "prova ed errore" per questo, ma questa risposta di Github di Google Chrome Labs mi ha aiutato un po '. L'ho definito nel mio file principale e ha funzionato - bene, solo per un dominio di terze parti. Sto ancora facendo dei test, ma non vedo l'ora di aggiornare questa risposta con una soluzione migliore :)

Se hai PHP fino alla 7.2, come fa il mio server:

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

Oppure se il tuo host è già aggiornato alla 7.3, puoi usare:

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

Un'altra cosa che puoi provare a controllare i cookie è abilitare il flag qui sotto, che - con le loro stesse parole - "aggiungerà messaggi di avviso della console per ogni singolo cookie potenzialmente interessato da questa modifica":

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

Vedi l'intero codice su: https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md , hanno anche il codice per same-site-cookies.


Sto usando PHP 7.3 e ho provato entrambi (header e setcookie) ma ricevo ancora l'avviso SameSite quando carico una pagina con uno script PayPal ... Sono ancora su localhost, fa differenza?
LuBre,

@LuBre Hmm potrebbe essere. Non ho ancora provato in questo modo, ma ha senso. Inoltre, il tuo host locale ha SSL?
Dimas Pante

1
Purtroppo int non è un problema localhost, anche io avverto questo avviso online. Direi che è qualcosa dalla parte di Paypal ...
LuBre

Hmm beh ... Penso che il commento @vir sotto si adatti al tuo problema, probabilmente PayPal non è ancora molto preoccupato per questo: P
Dimas Pante

1
grazie per aver fornito la nuova sintassi php 7.3 - che ha risolto il mio problema
billynoah il

24

Con l'arrivo della nuova funzionalità, anche i SameSite=Nonecookie devono essere contrassegnati come Secureo verranno rifiutati.

È possibile trovare ulteriori informazioni sulla modifica degli aggiornamenti di cromo e in questo post del blog

Nota : non del tutto direttamente correlato alla domanda, ma potrebbe essere utile per gli altri che sono arrivati ​​qui perché era la mia preoccupazione all'inizio durante lo sviluppo del mio sito Web:

se visualizzi l'avviso dalla domanda che elenca alcuni siti di terze parti (nel mio caso era google.com, eh), ciò significa che devono correggerlo e non ha nulla a che fare con il tuo sito. Naturalmente, a meno che l'avviso non menzioni il tuo sito, nel qual caso l'aggiunta Securedovrebbe risolverlo.


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
Aggiungi una descrizione delle informazioni sulla tua risposta
Lizesh Shakya,

ok è l'unica risposta su questa pagina che funziona e lavora in produzione: D
Robert Greene,

1
Dal documento, le chiavi dell'array dovrebbero essere in minuscolo: link
Peggiore

1
Questo ha funzionato per me in php 5 e joomla e chrome!
Hayden Thring,

1

Ho finito per riparare la nostra installazione di Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2 per Chrome 80 installando mod_headers:

a2enmod headers

Aggiunta della seguente direttiva alle nostre configurazioni Apache VirtualHost:

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

E riavviare Apache:

service apache2 restart

Nel rivedere i documenti ( http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html ) ho notato che la condizione "sempre" presenta determinate situazioni in cui non funziona dallo stesso pool di intestazioni di risposta. Quindi non usare "sempre" è ciò che ha funzionato per me con PHP, ma i documenti suggeriscono che se vuoi coprire tutte le tue basi potresti aggiungere la direttiva sia con che senza "sempre". Non l'ho provato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.