Chrome, Firefox, Edge i inne zmieniają swoje domyślne działanie, zgodnie z IETF oferty pakietowej, Stopniowo lepsze pliki cookie tak aby:
- Pliki cookie bez atrybutu
SameSite
są traktowane jak plikiSameSite=Lax
, Oznacza to, że domyślnym działaniem jest ograniczenie plików cookie do plików cookie wyłącznie kontekstu. - Pliki cookie służące do obsługi wielu witryn muszą określić
SameSite=None; Secure
do umożliwianie uwzględniania treści w kontekście osób trzecich.
W razie potrzeby zaktualizuj atrybuty swojej witryny, plików cookie innych firm, aby nie były blokowane w przyszłości.
Przypadki użycia plików cookie z innych witryn lub plików cookie innych firm
Istnieje wiele typowych przypadków użycia i wzorców, w których pliki cookie muszą być przesłane w kontekście osoby trzeciej. Jeśli udostępniasz lub polegasz na którymś z tych sposobów użycia upewnij się, że zarówno Ty, jak i dostawca aktualizujecie pliki cookie zapewnić prawidłowe działanie usługi.
Treści w elemencie <iframe>
Treści z innej witryny wyświetlane w elemencie <iframe>
pochodzą z zewnętrznego źródła
i dodaje kontekst. Standardowe przypadki użycia obejmują:
- umieszczone treści udostępnione z innych witryn, takie jak filmy, mapy, przykłady kodu, i postów społecznościowych.
- widżety z usług zewnętrznych, takich jak płatności, kalendarze, rezerwacje funkcje rezerwacji.
- widżety (np. przyciski mediów społecznościowych lub usługi zapobiegające oszustwom), które sprawiają, że są mniej oczywiste.
<iframes>
Pliki cookie mogą być tutaj używane m.in. do utrzymywania stanu sesji, przechowywania ogólne preferencje, włączać statystyk ani personalizować treści dla użytkowników z istniejących kont.
Internet jest z natury kompozycyjny, więc interfejs <iframes>
służy też do umieszczania elementów
oglądane w kontekście nadrzędnym lub w kontekście własnym. wszystkie pliki cookie witryny,
wyświetlane w elementach iframe są uznawane za pliki cookie innych firm. Jeśli
tworzysz witryny, które chcesz umieścić w innych witrynach i potrzebujesz plików cookie, aby je umieścić;
musisz też upewnić się, że są one oznaczone do użytku w innych witrynach
bez nich
pięknie się opuszczą.
„Niebezpieczne” żądań do różnych witryn
„Niebezpieczne” może wydawać się niepokojące, ale odnosi się do każdego wniosku, który może
która miała zmienić stan. W przypadku witryn są to głównie żądania POST. Ciastka
oznaczone jako SameSite=Lax
są wysyłane w bezpiecznej nawigacji najwyższego poziomu, np. po kliknięciu
link do innej witryny. Jednak na przykład żądanie <form>
do
inna witryna za pomocą metody POST nie zawiera plików cookie.
Ten wzorzec jest używany w witrynach, które mogą przekierowywać użytkownika do pilota
do wykonania jakiejś operacji przed zwróceniem, np. przekierowania do
zewnętrznego dostawcy tożsamości. Zanim użytkownik opuści witrynę, plik cookie
zestaw zawierający token jednorazowego użytku z oczekiwaniem, że token ten może być
sprawdziliśmy prośbę o zwrot, aby złagodzić
Fałszywe żądania w różnych witrynach
ataków. Jeśli to żądanie powraca za pomocą metody POST, musisz zaznaczyć pole
pliki cookie jako SameSite=None; Secure
.
Zasoby zdalne
Dowolny zdalny zasób na stronie, np. z tagów <img>
lub tagów <script>
–
może zależeć od przesyłania plików cookie wraz z żądaniem. Typowe przypadki użycia to
pikseli śledzących i personalizacji treści.
Dotyczy to również żądań wysyłanych z Twojego JavaScriptu za pomocą parametru fetch
lub
XMLHttpRequest
Jeśli funkcja fetch()
jest wywoływana za pomocą
opcję credentials: 'include'
,
i mogą zawierać pliki cookie.
W przypadku XMLHttpRequest
oczekiwane pliki cookie są zwykle oznaczone za pomocą tagu
Wartość: withCredentials
do true
. Pliki cookie muszą być odpowiednio oznaczone, aby mogły zostać umieszczone w
żądania między witrynami.
Treści w komponencie WebView
Komponent WebView w aplikacji na danej platformie korzysta z przeglądarki. Deweloperzy muszą sprawdzić, czy ograniczenia lub problemy, które wpływają na ich aplikacje, mają również zastosowanie do przez komponenty WebView ich aplikacji.
Aplikacje przeznaczone na tę platformę mogą też ustawiać pliki cookie bezpośrednio za pomocą
Interfejs API CookieManager –
Tak jak w przypadku plików cookie ustawianych za pomocą nagłówków lub JavaScriptu, rozważ umieszczenie
SameSite=None; Secure
, jeśli są przeznaczone do użytku w różnych witrynach.
Jak wdrożyć SameSite
już dziś
Wszystkie pliki cookie, które są potrzebne tylko we własnym kontekście, oznacz jako SameSite=Lax
lub SameSite=Strict
w zależności od potrzeb. Jeśli nie oznaczysz tych plików cookie
Obsługują je za pomocą domyślnego zachowania przeglądarki,
niespójnie w różnych przeglądarkach i potencjalnie powodować wyświetlanie ostrzeżeń w konsoli dla każdego
.
Set-Cookie: first_party_var=value; SameSite=Lax
Pamiętaj, aby oznaczyć wszystkie pliki cookie wymagane w kontekście zewnętrznym jako
SameSite=None; Secure
Oba atrybuty są wymagane. Jeśli podasz
None
bez Secure
, plik cookie zostanie odrzucony. Aby uwzględnić różnice
w implementacjach przeglądarek, może być konieczne użycie
pewnych mechanizmów łagodzących
strategie opisane w artykule Obsługa niezgodnych klientów.
Set-Cookie: third_party_var=value; SameSite=None; Secure
Obsługa niezgodnych klientów
Te zmiany obejmujące zasadę None
i domyślne działanie aktualizacji pozostają
są stosunkowo nowe, różne przeglądarki obsługują je na różne sposoby. Możesz polecić
Wejdź na stronę z aktualizacjami na chromium.org
pod listę znanych problemów, ale ta lista może nie być wyczerpująca.
Jednym z możliwych rozwiązań jest ustawienie każdego pliku cookie w nowym i starym stylu:
Set-cookie: 3pcookie=value; SameSite=None; Secure
Set-cookie: 3pcookie-legacy=value; Secure
Przeglądarki, które stosują nowsze działanie, umieszczają w pliku cookie parametr SameSite
. Przeglądarki, które nie wdrożą nowego działania, ignorują tę wartość i ustawiają
plik cookie 3pcookie-legacy
. Podczas przetwarzania załączonych plików cookie witryna powinna:
najpierw sprawdź, czy występuje nowy styl plików cookie, a następnie wróć do
starszego pliku cookie, jeśli nie może znaleźć nowego.
Z przykładu poniżej dowiesz się, jak to zrobić w środowisku Node.js przy użyciu Express Framework i jego Oprogramowanie pośredniczące cookie-parser:
const express = require('express');
const cp = require('cookie-parser');
const app = express();
app.use(cp());
app.get('/set', (req, res) => {
// Set the new style cookie
res.cookie('3pcookie', 'value', { sameSite: 'none', secure: true });
// And set the same value in the legacy cookie
res.cookie('3pcookie-legacy', 'value', { secure: true });
res.end();
});
app.get('/', (req, res) => {
let cookieVal = null;
if (req.cookies['3pcookie']) {
// check the new style cookie first
cookieVal = req.cookies['3pcookie'];
} else if (req.cookies['3pcookie-legacy']) {
// otherwise fall back to the legacy cookie
cookieVal = req.cookies['3pcookie-legacy'];
}
res.end();
});
app.listen(process.env.PORT);
Takie podejście wymaga wykonania dodatkowych czynności przy konfiguracji nadmiarowych plików cookie i zmienia się zarówno podczas ustawiania, jak i odczytu pliku cookie. Powinien jednak obejmują wszystkie przeglądarki niezależnie od ich działania i zachowują pliki cookie innych firm działania usług Google.
Możesz też wykryć klienta za pomocą ciągu znaków klienta użytkownika, gdy
Wysłano nagłówek Set-Cookie
. Zapoznaj się z
listę niezgodnych klientów,
i używaj odpowiedniej biblioteki wykrywania klientów na swojej platformie,
np. biblioteka ua-parser-js
w Node.js. Ta metoda wymaga tylko jednej zmiany, ale klient użytkownika
śledzenie może nie zainteresować wszystkich użytkowników, których dotyczy ten problem.
Obsługa SameSite=None
w językach, bibliotekach i platformach
Większość języków i bibliotek obsługuje atrybut SameSite
w przypadku
plików cookie. Dodanie parametru SameSite=None
jest jednak wciąż stosunkowo dużo
być może trzeba będzie zająć się na razie pewnym standardowym zachowaniem.
Takie zachowania są opisane w
Przykładowe repozytorium SameSite
na GitHubie.
Uzyskiwanie pomocy
Pliki cookie są używane w całej sieci, a żadne zespoły programistów rzadko z nich korzystają mieć pełną wiedzę na temat miejsc, w których są tworzone i wykorzystywane w witrynie, zwłaszcza w wielu witrynach. Gdy napotkasz problem, może to być pierwszy raz każdy znajdzie takie rozwiązanie, więc proszę o kontakt:
- Zgłoś problem w
Przykładowe repozytorium
SameSite
na GitHubie. - Zadaj pytanie na "samesite" w StackOverflow.
- W przypadku problemów z działaniem Chromium zgłoś błąd w Narzędzie do śledzenia błędów Chromium.
- Śledź postępy w Chrome na
Strona z aktualizacjami aplikacji
SameSite
.