Comment corriger l'avertissement «ne définir aucun cookie SameSite»? Extension Chrome

41

J'ai créé une extension chrome et à partir de popup.js j'ai appelé un script PHP (Using Xhttprequest) qui lit le cookie. Comme ça:

$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' SameSiteattribut. Une future version de Chrome ne fournira des cookies avec des demandes intersites que s'ils sont définis avec SameSite=Noneet 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 cette question.

Danilo Ivanovic
la source
Il dit également «sécurisé», ce qui signifie https, je suppose.
wOxxOm
vous pouvez suivre cet exemple pour résoudre ce problème: stackoverflow.com/a/58723552/6215447
Code Cooker
Vous pouvez utiliser une bibliothèque tierce pour gérer les cookies sur PHP 5.4+, fournissant un setcookieremplacement qui prend un argument supplémentaire $sameSite. L'argument peut être None, Laxou Strict. Une interface POO est également disponible.
caw

Réponses:

24

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

Si vous avez PHP jusqu'à 7.2, comme mon serveur:

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 aussi le code pour same-site-cookies.

Dimas Pante
la source
J'utilise PHP 7.3 et j'ai utilisé les deux (en-tête et setcookie) mais je reçois toujours l'avertissement SameSite lorsque je charge une page avec un script PayPal ... Je suis toujours sur localhost, cela fait-il une différence?
LuBre
@LuBre Hmm pourrait l'être. Je n'ai pas encore testé comme ça, mais c'est logique. De plus, votre hôte local a-t-il SSL?
Dimas Pante
1
Malheureusement, ce n'est pas un problème localhost, j'éprouve également cet avertissement en ligne. Je dirais que c'est quelque chose du côté de Paypal ...
LuBre
Hmm bien ... Je pense que @vir nous commente ci-dessous correspond à votre problème, PayPal n'est probablement pas encore très préoccupé par cela: P
Dimas Pante
1
merci d'avoir fourni la nouvelle syntaxe php 7.3 - qui a résolu mon problème
billynoah
24

À mesure que la nouvelle fonctionnalité arrive, les SameSite=Nonecookies doivent également être marqués comme Secureou ils seront rejetés.

On peut trouver plus d'informations sur le changement sur les mises à jour de chrome et sur ce 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 le réparer et que cela n'a rien à voir avec votre site. Bien sûr, à moins que l'avertissement ne mentionne votre site, auquel cas l'ajout Securedevrait le corriger.

virus
la source
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
la source
1
Ajoutez un élément d'information sur votre réponse
Lizesh Shakya
ok c'est la seule réponse sur cette page qui fonctionne réellement et travaille en production: D
Robert Greene
1
Dans le document, les clés du tableau doivent être en minuscules: lien
Pire
1
Cela a fonctionné pour moi en php 5 et joomla et chrome!
Hayden Thring
1

J'ai fini par corriger notre installation Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2 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 à partir 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 documents suggèrent que si vous voulez couvrir toutes vos bases, vous pouvez ajouter la directive avec et sans "toujours". Je n'ai pas testé ça.

Ethan Burnside
la source