Zasoby z innych domen obsługiwane przez inne firmy często nie mają odpowiednich nagłówków CORP. Jeśli można ich prosić bez danych logowania, możesz teraz włączyć izolację zasobów z innych domen, oznaczając je jako takie.
Udostępniliśmy nową wartość zasady dotyczącej zasobów z innych domen (COEP) credentialless
, która umożliwia przeglądarce ładowanie zasobów z innych domen, które nie korzystają z zasad dotyczących zasobów z innych domen (CORP), wysyłając żądanie bez danych logowania, takich jak pliki cookie. Pomaga to deweloperom
łatwiej wdrożyć izolację od zasobów z innych domen.
Dlaczego potrzebujemy izolacji zasobów z innych domen
Niektóre internetowe interfejsy API, takie jak Spectre, zwiększają ryzyko ataków typu side-channel. Aby ograniczyć to ryzyko, przeglądarki udostępniają izolowane środowisko nazywane izolacją zasobów z innych domen, które jest dostępne po wyrażeniu zgody. W stanie izolowanym od zasobów z innych domen strona może używać funkcji uprzywilejowanych, takich jak SharedArrayBuffer
, performance.measureUserAgentSpecificMemory()
i dokładne liczniki czasu o lepszej rozdzielczości, a jednocześnie izoluje źródło od innych źródeł, chyba że się na to zgodzą.
Aby umożliwić izolację zasobów z innych domen, strona internetowa musi wysłać 2 nagłówki HTTP:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
W stanie izolowanym od zasobów z innych domen wszystkie zasoby z innych domen muszą być udostępniane za pomocą CORS lub muszą mieć wczytywany nagłówek Cross-Origin-Resource-Policy
.
Wyzwania związane z włączaniem izolacji zasobów z innych domen
Izolacja zasobów z innych domen zwiększa bezpieczeństwo stron i umożliwia korzystanie z zaawansowanych funkcji, ale jej wdrożenie może być trudne. Jednym z największych wyzwań jest wymóg włączenia CORS lub CORP dla wszystkich zasobów z innych domen. Zasoby bez tych nagłówków nie będą wczytywane przez przeglądarkę na stronie izolowanej od zasobów z innych domen.
Takie zasoby z innych domen są zwykle obsługiwane przez firmy zewnętrzne, którym dodanie niezbędnych nagłówków może nie być łatwe.
Co jednak, jeśli wiemy, że zasób jest wystarczająco bezpieczny, żeby można go było załadować? W rzeczywistości jedynymi zasobami, które są zagrożone, są żądania z użyciem danych logowania, ponieważ potencjalnie zawierają one informacje poufne, których haker nie może wczytać. Oznacza to, że zasoby, których można żądać bez danych logowania, są publicznie dostępne i można je bezpiecznie wczytać.
credentialless
na ratunek
W tym miejscu do akcji wkracza COEP: credentialless
. credentialless
to nowa wartość nagłówka Cross-Origin-Embedder-Policy
. Podobnie jak w przypadku require-corp
umożliwia włączanie izolacji zasobów z innych domen, ale zamiast wymagać nagłówka CORP:cross-origin
w przypadku żądań z innych domen bez danych logowania, są wysyłane bez danych logowania (np. w plikach cookie).
Możesz też włączyć izolację zasobów z innych domen, używając tych 2 nagłówków:
Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin
Oznacza to, że żądany serwer z innych domen nie będzie w stanie odpowiedzieć z użyciem zasobów poufnych, a żądający może zawsze przyjąć, że odpowiedź zawiera tylko informacje dostępne publicznie.
Jest to też zgodne z planem przeglądarek dotyczących wycofywania plików cookie innych firm.
Pokaz
W tej wersji demonstracyjnej możesz wypróbować różne opcje nagłówka: https://cross-origin-isolation.glitch.me
Najczęstsze pytania
Czy w środowisku credentialless
mogę wysłać żądanie uwierzytelnień?
Bez wątpienia wiąże się to z kosztem zmiany trybu żądania tak, aby odpowiedź wymagała sprawdzenia CORS. W przypadku tagów HTML, takich jak <audio>
, <img>
, <link>
, <script>
i <video>
, wystarczy wyraźnie dołączyć crossorigin="use-credentials"
, aby przeglądarka mogła wysyłać żądania z danymi uwierzytelniającymi.
Nawet jeśli na przykład dokument w adresie https://www.example.com
ma nagłówek Cross-Origin-Embedder-Policy: credentialless
, <img
src="https://images.example.com/avatar.png" crossorigin="use-credentials">
wyśle żądanie z danymi uwierzytelniającymi.
W przypadku interfejsu API fetch()
można użyć request.mode = 'cors'
.
COEP: credentialless
W jaki sposób COEP: require-corp
nadal jest przydatny w przypadku mojej witryny?
COEP: require-corp
nie wymaga ręcznego przełączania trybu żądania na CORS, jeśli w przypadku niektórych zasobów podrzędnych z innych domen pliki cookie są potrzebne.
Czy w środowisku credentialless
mogę też wczytywać elementy iframe z różnych domen bez specjalnych nagłówków?
Nie. Wczytywanie elementów iframe z innych domen w środowisku credentialless
nadal wymaga tych samych warunków co w przypadku require-corp
. Dokumenty iframe muszą być wyświetlane z 2 nagłówkami:
Cross-Origin-Embedder-Policy: credentialless
(lubrequire-corp
)Cross-Origin-Resource-Policy: cross-origin
Na szczęście toczy się dyskusja na temat zezwalania na ładowanie elementów iframe z innych domen bez tych nagłówków poprzez dodanie elementów iframe crossorigin="anonymous"
.
Umożliwi to ładowanie elementów iframe z innych domen bez nagłówków, ale bez danych logowania.
Czy ta funkcja zostanie zastosowana przez inne przeglądarki?
- Problem ze śledzeniem w przeglądarce Firefox
- Żądanie Webkit o pozycję: Brak sygnału
- W3C TAG Żądanie pozycji: Oczekujące
Co dalej
Wkrótce wprowadzimy 2 dodatkowe aktualizacje, aby wyeliminować inne wyzwania związane z izolacją zasobów z innych domen:
Użytkownicy, którzy z powodu powyższych przeszkód zarejestrowali się w testowaniu origin Chrome w celu przedłużenia zmiany SharedArrayBuffer, mogą się zastanawiać, kiedy zostanie ona zakończona. Początkowo informowaliśmy, że zakończymy ją w Chrome 96, ale postanowiliśmy ją przełożyć na wersję 106.
Zasoby
- Odizolowanie witryny od zasobów z innych domen przy użyciu strategii COOP i COEP
- Dlaczego potrzebujesz „izolowanych od zasobów z innych domen”, aby korzystać z zaawansowanych funkcji
- Przewodnik po włączeniu izolacji zasobów z innych domen
- Aktualizacje obiektu SharedSlateBuffer w Chrome 88 na Androidzie i w Chrome 92 na komputerze
Zdjęcie: Martin Adams w aplikacji Unsplash