Jak naprawić ostrzeżenie „ustaw ciasteczko SameSite na brak”? Rozszerzenie Chrome

41

Stworzyłem rozszerzenie chrome i z popup.js nazwałem skrypt PHP (używając Xhttprequest), który czyta ciasteczko. Lubię to:

$cookie_name = "mycookie";

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

Ale dostaję to ostrzeżenie przy błędach w rozszerzeniach.

Plik cookie skojarzony z zasobem obejmującym wiele witryn w (Oto moja domena) został ustawiony bez SameSiteatrybutu. Przyszłe wydanie przeglądarki Chrome będzie dostarczać pliki cookie z żądaniami obejmującymi wiele witryn, tylko jeśli zostaną ustawione za pomocą SameSite=Nonei Secure. Możesz przeglądać pliki cookie w narzędziach dla programistów w obszarze Aplikacja> Pamięć> Pliki cookie i zobaczyć więcej szczegółów na https://www.chromestatus.com/feature/5088147346030592 i https://www.chromestatus.com/feature/5633521622188032 .

Próbowałem utworzyć taki plik cookie, ale to nie pomogło.

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

Postępując zgodnie z instrukcjami z tego pytania.

Danilo Ivanovic
źródło
Mówi także „Bezpieczny”, co, jak sądzę, oznacza https.
wOxxOm,
możesz wykonać ten przykład, aby rozwiązać ten problem: stackoverflow.com/a/58723552/6215447
Code Cooker
Możesz korzystać z biblioteki innej firmy do zarządzania plikami cookie w PHP 5.4+, zapewniając setcookiezastępstwo, które wymaga dodatkowego argumentu $sameSite. Argumentem może być None, Laxlub Strict. Dostępny jest również interfejs OOP.
caw

Odpowiedzi:

24

Jestem też w „próbie i błędzie”, ale ta odpowiedź od Github z Google Chrome Labs trochę mi pomogła. Zdefiniowałem go w moim głównym pliku i zadziałało - cóż, tylko dla jednej domeny strony trzeciej. Nadal przeprowadzam testy, ale chętnie zaktualizuję tę odpowiedź, stosując lepsze rozwiązanie :)

Jeśli masz PHP do 7.2, tak jak mój serwer:

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

Lub jeśli twój host jest już zaktualizowany do wersji 7.3, możesz użyć:

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

Kolejną rzeczą, którą możesz spróbować sprawdzić w plikach cookie, jest włączenie poniższej flagi, która - ich własnymi słowami - „doda komunikaty ostrzegawcze konsoli dla każdego pliku cookie potencjalnie dotkniętego tą zmianą”:

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

Zobacz cały kod na stronie : https://github.com/GoogleChromeLabs/samesite-examples/blob/master/php.md , oni też mają kod same-site-cookies.

Dimas Pante
źródło
Korzystam z PHP 7.3 i korzystałem zarówno z nagłówka, jak i setcookie, ale nadal pojawia się ostrzeżenie SameSite, gdy ładuję stronę ze skryptem PayPal ... Mimo to nadal jestem na hoście lokalnym, czy to robi różnicę?
LuBre
@LuBre Hmm może być. Nie testowałem tego jeszcze, ale ma sens. Ponadto, czy Twój lokalny host ma SSL?
Dimas Pante
1
Niestety nie jest to problem lokalnego hosta, to ostrzeżenie pojawia się również w Internecie. Powiedziałbym, że to coś po stronie Paypal ...
LuBre
Hmm cóż ... Myślę, że @vir nas komentarz poniżej pasuje do twojego problemu, prawdopodobnie PayPal jeszcze się tym nie martwi: P
Dimas Pante
1
dzięki za udostępnienie nowej składni php 7.3 - która naprawiła mój problem
billynoah
24

Gdy pojawi się nowa funkcja, SameSite=None pliki cookie muszą być również oznaczone jako Securelub zostaną odrzucone.

Więcej informacji na temat zmiany w aktualizacjach chromu i na ten temat można znaleźć poście blogu

Uwaga : niezupełnie związane bezpośrednio z pytaniem, ale może być przydatne dla innych, którzy tu wylądowali, ponieważ na początku było to moim celem podczas tworzenia mojej witryny:

jeśli widzisz ostrzeżenie z pytania, które wymienia niektóre witryny stron trzecich (w moim przypadku było to google.com, huh) - oznacza to, że muszą to naprawić i nie ma to nic wspólnego z twoją witryną. Oczywiście, chyba że ostrzeżenie wspomina o Twojej witrynie, w takim przypadku dodanie Securepowinno to naprawić.

wirus
źródło
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
źródło
1
Dodaj fragment opisu informacji o swojej odpowiedzi
Lizesh Shakya
ok to jedyna odpowiedź na tej stronie, która faktycznie działa i pracuje w produkcji: D
Robert Greene
1
W dokumencie klucze tablicy powinny być pisane małymi literami: link
Najgorszy
1
Działa to dla mnie w php 5 oraz joomla i chrome!
Hayden Thring
1

Naprawiłem instalację Ubuntu 18.04 / Apache 2.4.29 / PHP 7.2 dla Chrome 80, instalując mod_headers:

a2enmod headers

Dodanie następującej dyrektywy do naszych konfiguracji VirtualHost Apache:

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

I restartowanie Apache:

service apache2 restart

Przeglądając dokumenty ( http://www.balkangreenfoundation.org/manual/en/mod/mod_headers.html ) zauważyłem, że warunek „zawsze” ma pewne sytuacje, w których nie działa z tej samej puli nagłówków odpowiedzi. Dlatego nie używanie „zawsze” jest tym, co działało dla mnie w PHP, ale dokumenty sugerują, że jeśli chcesz objąć wszystkie swoje bazy, możesz dodać dyrektywę zarówno z „zawsze”, jak i bez. Nie testowałem tego.

Ethan Burnside
źródło