Wie kann die Warnung "SameSite-Cookie auf keine setzen" behoben werden? Chrome-Erweiterung

41

Ich habe eine Chrome-Erweiterung erstellt und aus popup.js ein PHP-Skript (Using Xhttprequest) aufgerufen, das das Cookie liest. So was:

$cookie_name = "mycookie";

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

Aber ich bekomme diese Warnung bei Fehlern in Erweiterungen.

Ein Cookie, das einer standortübergreifenden Ressource unter (Hier ist meine Domain) zugeordnet ist, wurde ohne das SameSiteAttribut gesetzt. Eine zukünftige Version von Chrome liefert Cookies mit standortübergreifenden Anfragen nur, wenn sie mit SameSite=Noneund gesetzt sind Secure. Sie können Cookies in Entwicklertools unter Anwendung> Speicher> Cookies überprüfen. Weitere Informationen finden Sie unter https://www.chromestatus.com/feature/5088147346030592 und https://www.chromestatus.com/feature/5633521622188032 .

Ich habe versucht, ein solches Cookie zu erstellen, aber es hat nicht geholfen.

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

Befolgen Sie die Anweisungen aus dieser Frage.

Danilo Ivanovic
quelle
Es heißt auch "Sicher", was https bedeutet, denke ich.
wOxxOm
Sie können diesem Beispiel folgen, um dieses Problem zu lösen: stackoverflow.com/a/58723552/6215447
Code Cooker
Sie können eine Bibliothek eines Drittanbieters verwenden , um Cookies unter PHP 5.4+ zu verwalten, und einen setcookieErsatz bereitstellen , der ein zusätzliches Argument enthält $sameSite. Das Argument kann sein None, Laxoder Strict. Eine OOP-Schnittstelle ist ebenfalls verfügbar.
Caw

Antworten:

24

Ich bin auch in einem "Versuch und Irrtum" dafür, aber diese Antwort von Google Chrome Labs 'Github hat mir ein wenig geholfen. Ich habe es in meiner Hauptdatei definiert und es hat funktioniert - nun, nur für eine Drittanbieter-Domain. Ich mache immer noch Tests, aber ich bin gespannt darauf, diese Antwort mit einer besseren Lösung zu aktualisieren :)

Wenn Sie PHP bis 7.2 haben, wie mein Server:

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

Wenn Ihr Host bereits auf 7.3 aktualisiert wurde, können Sie Folgendes verwenden:

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

Sie können auch versuchen, die Cookies zu überprüfen, indem Sie das folgende Flag aktivieren, das - in eigenen Worten - "Konsolenwarnmeldungen für jedes einzelne Cookie hinzufügt, das möglicherweise von dieser Änderung betroffen ist":

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

Den gesamten Code finden Sie unter: https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md . Sie haben auch den Code dafür same-site-cookies.

Dimas Pante
quelle
Ich verwende PHP 7.3 und habe beide (Header und Setcookie) getestet, aber ich erhalte immer noch die SameSite-Warnung, wenn ich eine Seite mit einem PayPal-Skript lade ... Ich bin immer noch auf localhost, macht das einen Unterschied?
LuBre
@LuBre Hmm könnte sein. Ich habe noch nicht so getestet, aber es macht Sinn. Verfügt Ihr Localhost auch über SSL?
Dimas Pante
1
Leider ist int kein localhost-Problem, ich erlebe diese Warnung auch online. Ich würde sagen, es ist etwas auf
Paypals
Hmm gut ... Ich denke, @vir uns Kommentar unten passt zu Ihrem Problem, wahrscheinlich ist PayPal noch nicht sehr besorgt darüber: P
Dimas Pante
1
Vielen
24

Mit der neuen Funktion SameSite=Nonemüssen Cookies auch als gekennzeichnet werden, da Securesie sonst abgelehnt werden.

Weitere Informationen zur Änderung finden Sie in den Chrom-Updates und in diesem Blog-Beitrag

Hinweis : Nicht ganz direkt mit der Frage verbunden, könnte aber für andere nützlich sein, die hier gelandet sind, da es mir bei der Entwicklung meiner Website zunächst ein Anliegen war:

Wenn Sie die Warnung aus einer Frage sehen, in der einige Websites von Drittanbietern aufgeführt sind (in meinem Fall war es google.com, huh), bedeutet dies, dass sie behoben werden müssen und nichts mit Ihrer Website zu tun haben. Natürlich, es sei denn, in der Warnung wird Ihre Site erwähnt. In diesem Fall Securesollte das Hinzufügen das Problem beheben.

Virus
quelle
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
quelle
1
Fügen Sie eine Beschreibung zu Ihrer Antwort hinzu
Lizesh Shakya
ok, es ist die einzige Antwort auf dieser Seite, die tatsächlich funktioniert und in der Produktion arbeitet: D
Robert Greene
1
In der Dokumentation sollten die Array-Schlüssel in Kleinbuchstaben angegeben sein: link
Worst
1
Das hat bei mir in PHP 5 und Joomla und Chrome funktioniert!
Hayden Thring
1

Am Ende habe ich unsere Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2-Installation für Chrome 80 durch die Installation von mod_headers repariert:

a2enmod headers

Hinzufügen der folgenden Anweisung zu unseren Apache VirtualHost-Konfigurationen:

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

Und Neustart von Apache:

service apache2 restart

Beim Überprüfen der Dokumente ( http://www.balkangreenfoundation.org/manual/en/mod/mod_modders.html ) habe ich festgestellt, dass die Bedingung "immer" bestimmte Situationen aufweist, in denen sie nicht aus demselben Pool von Antwortheadern funktioniert. Daher hat es für mich mit PHP nicht funktioniert, "immer" zu verwenden, aber die Dokumente schlagen vor, dass Sie die Direktive sowohl mit als auch ohne "immer" hinzufügen können, wenn Sie alle Ihre Grundlagen abdecken möchten. Ich habe das nicht getestet.

Ethan Burnside
quelle