Zasoby z innych domen obsługiwane przez firmy zewnętrzne często nie zawierają odpowiednich nagłówków CORP. Jeśli można je wysyłać bez danych logowania, możesz teraz włączyć izolację zasobów z innych domen, odpowiednio je oznaczając.
Wysłaliśmy nową wartość zasad dotyczących umieszczania treści z różnych domen (CoEP)
credentialless
, który pozwala przeglądarce wczytywać zasoby z innych domen,
nie korzystają z zasady zasobów Cross-Origin Resource Policy (CORP), wysyłając żądanie bez
danych logowania, takich jak pliki cookie. Ułatwia to deweloperom wdrażanie rozwiązań z innych domen
izolację.
Dlaczego potrzebujemy izolacji zasobów z innych domen
Niektóre internetowe interfejsy API zwiększają ryzyko ataków zewnętrznych, na przykład:
Spectre Do
i ogranicza ryzyko. Przeglądarki udostępniają oparte na akceptacji, izolowane środowisko
izolacji zasobów z innych domen. Importowanie z innej domeny
izolowana, strona może korzystać z funkcji z podwyższonymi uprawnieniami, takich jak
SharedArrayBuffer
performance.measureUserAgentSpecificMemory()
oraz liczniki czasu o wysokiej dokładności i lepszej rozdzielczości.
podczas odizolowania źródła od innych, chyba że ta osoba wyrazi na to zgodę.
Aby włączyć izolację zasobów z innych domen, strona internetowa musi wysyłać 2 nagłówki HTTP:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin
W stanie izolacji od zasobów z innych domen muszą być udostępniane wszystkie zasoby z innych domen
za pomocą CORS lub ustawić nagłówek Cross-Origin-Resource-Policy
do wczytania.
Wyzwania związane z włączeniem izolacji zasobów z innych domen
Izolacja zasobów z innych domen zapewnia stronom internetowym większe bezpieczeństwo po włączeniu zaawansowanych funkcji, wdrożenie trudne. Jedna z największych wyzwania to wymóg włączenia CORS lub CORP we wszystkich domenach z innych domen i zasobami Google Cloud. Zasoby bez tych nagłówków nie będą wczytywane przez przeglądarkę stronę izolowaną od zasobów z innych domen.
Te zasoby z innych domen są zwykle obsługiwane przez firmy zewnętrzne, w imieniu których mogą dodanie niezbędnych nagłówków nie może być łatwe.
Co jednak, jeśli wiemy, że zasób jest wystarczająco bezpieczny, by go załadować? Jedynym możliwym zagrożone są zasoby żądane przy użyciu danych logowania, może zawierać poufne informacje, których atakujący nie będzie mógł wczytać własnych. Oznacza to, że zasoby, o które można prosić bez danych logowania, są publiczne i bezpiecznego wczytywania.
credentialless
na ratunek
Dlatego z pomocą przychodzi COEP: credentialless
. credentialless
to nowa wartość
dla nagłówka Cross-Origin-Embedder-Policy
. Podobnie jak require-corp
, może
włącz izolację zasobów z innych domen, ale zamiast wymagać tagu CORP:cross-origin
w przypadku żądań z innej domeny, które nie są zabezpieczone, są wysyłane bez
dane logowania (np. pliki cookie).
Możesz włączyć izolację zasobów z innych domen za pomocą następujące dwa nagłówki:
Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin
Oznacza to, że żądany serwer z innej domeny nie może odpowiedzieć z żądaniem zasób poufny, więc osoba wysyłająca prośbę może zawsze założyć, że odpowiedź tylko zawiera publicznie dostępne informacje.
Jest to także zgodne z zasadami przeglądarek plan wycofania plików cookie innych firm.
Prezentacja
W tej wersji demonstracyjnej możesz wypróbować różne opcje nagłówków: https://cross-origin-isolation.glitch.me
Najczęstsze pytania
Czy mogę wysłać żądanie z danymi uwierzytelniającymi w środowisku credentialless
?
Oczywiście, kosztem zmiany trybu żądania w celu wymagania kontroli CORS
za odpowiedź. W przypadku tagów HTML, takich jak <audio>
, <img>
, <link>
, <script>
,
i <video>
, po prostu dołącz jawnie crossorigin="use-credentials"
, aby poinformować
do wysyłania żądań z danymi uwierzytelniającymi.
Na przykład nawet jeśli dokument w domenie https://www.example.com
zawiera
Cross-Origin-Embedder-Policy: credentialless
, <img
src="https://images.example.com/avatar.png" crossorigin="use-credentials">
będzie
wysłać żądanie z danymi uwierzytelniającymi.
W przypadku interfejsu API fetch()
można użyć request.mode = 'cors'
.
W jaki sposób COEP: require-corp
nadal jest przydatny w mojej witrynie, podany COEP: credentialless
?
COEP: require-corp
nie wymaga ręcznego przełączania się na tryb żądania
CORS, jeśli pliki cookie są potrzebne w przypadku niektórych podrzędnych zasobów z innych domen.
Czy w środowisku credentialless
mogę też wczytywać elementy iframe z innych domen bez specjalnych nagłówków?
Nie. Wczytywanie elementów iframe z innych domen w środowisku credentialless
nadal wymaga tych samych warunków co 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
Mamy też dobrą wiadomość: toczy się dyskusja na temat zezwalania na ładowanie elementów iframe z innych domen bez tych nagłówków przez nadanie elementom iframe crossorigin="anonymous"
.
Pozwoli to na ładowanie elementów iframe z innych domen bez nagłówków, ale bez
dane logowania.
Czy z tej funkcji będą korzystać inne przeglądarki?
- Problem ze śledzeniem w Firefoksie
- Żądanie Webkit dotyczące pozycji: brak sygnału
- W3C TAG Żądanie pozycji: Oczekująca
Co dalej?
Wprowadzimy 2 dodatkowe aktualizacje, które zniwelują inne wyzwania związane z izolacja zasobów z innych domen:
Osoby, które zarejestrowały się w testach origin Chrome w celu przedłużenia zmiany SharedSlateBuffer ze względu na: Powyższe przeszkody mogą się zastanawiać, kiedy zostanie ono zlikwidowane. Początkowo ogłosił, że zostanie on zamknięty w wersji Chrome 96, ale zdecydowaliśmy się odkładaj to na wersję Chrome 106.
Zasoby
- Ustawianie witryny jako izolowanej od zasobów z innych domen korzystając z COOP i COEP
- Dlaczego potrzebne jest określenie „izolowane od zasobów z innych domen” aby uzyskać dostęp do zaawansowanych funkcji
- Przewodnik dotyczący włączania izolacji zasobów z innych domen
- Aktualizacje SharedTrackBuffer w Chrome 88 na Androidzie i Chrome 92 na komputery
Zdjęcie: Martin Adams włączono Niepochlebne