web-dev-qa-db-fra.com

Comment corriger l'avertissement "ne pas définir le cookie SameSite sur aucun"? Chrome Extension

J'ai créé une extension chrome et à partir de popup.js j'ai appelé PHP (en utilisant Xhttprequest) qui lit le cookie. Comme ceci:

$cookie_name = "mycookie";

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

Mais je reçois cet avertissement lors d'erreurs dans les extensions.

Un cookie associé à une ressource intersite sur (Voici mon domaine) a été défini sans l'attribut SameSite. Une future version de Chrome ne fournira des cookies avec des demandes intersites que s'ils sont définis avec SameSite=None et Secure. Vous pouvez consulter les cookies dans les outils de développement sous Application> Stockage> Cookies et voir plus de détails sur https://www.chromestatus.com/feature/5088147346030592 et https: //www.chromestatus .com/feature/5633521622188032 .

J'ai essayé de créer un cookie comme celui-ci mais cela n'a pas aidé.

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

En suivant les instructions de this question.

40
Danilo Ivanovic

Je suis également dans un "essai et erreur" pour cela, mais cette réponse de Google Chrome Labs 'Github m'a un peu aidé. Je l'ai défini dans mon fichier principal et cela a fonctionné - eh bien, pour un seul domaine tiers. Toujours en train de faire des tests, mais je suis impatient de mettre à jour cette réponse avec une meilleure solution :)

Si vous avez PHP jusqu'au 7.2, comme mon serveur le fait:

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

Ou si votre hôte est déjà mis à jour en 7.3, vous pouvez utiliser:

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

Une autre chose que vous pouvez essayer de vérifier les cookies est d'activer le drapeau ci-dessous qui, selon leurs propres mots, "ajoutera des messages d'avertissement de console pour chaque cookie potentiellement affecté par cette modification":

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

Voir le code complet sur: https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md , ils ont le code pour same-site-cookies aussi.

22
Dimas Pante

À mesure que la nouvelle fonctionnalité arrive, SameSite=None les cookies doivent également être marqués comme Secure ou ils seront rejetés.

On peut trouver plus d'informations sur le changement sur mises à jour de chrome et sur ce article de blog

Remarque : pas tout à fait directement lié à la question, mais pourrait être utile pour d'autres qui ont atterri ici car c'était ma préoccupation au début lors du développement de mon site Web:

si vous voyez l'avertissement de la question qui répertorie certains sites tiers (dans mon cas, c'était google.com, hein) - cela signifie qu'ils doivent corrigez-le et cela n'a rien à voir avec votre site. Bien sûr, sauf si l'avertissement mentionne votre site, auquel cas l'ajout de Secure devrait le corriger.

23
vir us
>= 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
Robert Greene

J'ai fini par corriger notre Ubuntu 18.04/Apache 2.4.29/PHP 7.2 installation pour Chrome 80 en installant mod_headers:

a2enmod headers

Ajout de la directive suivante à nos configurations Apache VirtualHost:

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

Et redémarrer Apache:

service Apache2 restart

En examinant les documents ( http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html ) j'ai remarqué que la condition "toujours" a certaines situations où elle ne fonctionne pas du même pool d'en-têtes de réponse. Donc, ne pas utiliser "toujours" est ce qui a fonctionné pour moi avec PHP mais les docs suggèrent que si vous voulez couvrir toutes vos bases, vous pouvez ajouter la directive avec et sans "toujours". J'ai pas testé ça.

0
Ethan Burnside