Przepisy na ciastka SameSite

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 pliki SameSite=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.

Obsługa przeglądarek

  • Chrome: 51.
  • Edge: 16.
  • Firefox: 60.
  • Safari: 13.

Źródło

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.

Schemat okna przeglądarki, w którym adres URL umieszczonej treści nie pasuje do adresu URL strony.
Jeśli umieszczone treści nie pochodzą z tej samej witryny co witryna najwyższego poziomu w kontekście przeglądania treści, są to treści należące do osób trzecich.

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.

Schemat przedstawiający przenoszenie żądania z jednej strony na drugą.
Jeśli przychodzące żądanie używa „bezpiecznego” strona wysyła pliki 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: