Ładuj zasoby z innych domen bez nagłówków CORP za pomocą COEP: bez danych logowania

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 (lub require-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?

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

Zdjęcie: Martin Adams włączono Niepochlebne