Ł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ę między domenami, oznaczając je jako takie.

Wprowadziliśmy nową wartość zasad dotyczących umieszczania zasobów z innych źródeł (COEP) credentialless, która umożliwia przeglądarce wczytywanie zasobów z innych źródeł, które nie korzystają z zasad dotyczących zasobów z innych źródeł (CORP), przez wysyłanie żądania bez danych uwierzytelniających, takich jak pliki cookie. Ułatwia to programistom stosowanie izolacji między domenami.

Dlaczego potrzebujemy izolacji od zasobów z innych domen

Niektóre interfejsy API zwiększają ryzyko ataków typu side-channel, takich jak Spectre. Aby ograniczyć to ryzyko, przeglądarki oferują odizolowane środowisko oparte na opcjonalnym zgłaszaniu, zwane izolacją zasobów z innych domen. W stanie izolowanym od zasobów z innych domen strona może korzystać z funkcji z podwyższonymi uprawnieniami, takich jak SharedArrayBuffer, performance.measureUserAgentSpecificMemory() i precyzyjne liczniki czasu o lepszej rozdzielczości, a jednocześnie odizolować źródło od innych użytkowników, chyba że się na to zgodzą.

Aby umożliwić izolację między domenami, strona internetowa musi wysył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 ustawiane do wczytywania nagłówka Cross-Origin-Resource-Policy.

Problemy z włączaniem izolacji między domenami

Izolacja zasobów z innych domen zwiększa bezpieczeństwo stron internetowych i umożliwia korzystanie z zaawansowanych funkcji, ale wdrożenie tej funkcji może być trudne. Jednym z największych wyzwań jest wymóg włączenia CORS lub CORP we wszystkich zasobach z innych domen. Zasoby bez tych nagłówków nie będą wczytywane przez przeglądarkę na stronie odizolowanej między domenami.

Te zasoby między domenami są zwykle dostarczane przez osoby trzecie, które mogą mieć trudności z dodaniem niezbędnych nagłówków.

Co jednak, jeśli wiemy, że zasób jest na tyle bezpieczny, że można go wczytać? W istocie jedyne zasoby, które są zagrożone, to te, do których dostęp jest uzyskiwany za pomocą danych logowania, ponieważ mogą one zawierać informacje poufne, których atakujący nie może samodzielnie pobrać. Oznacza to, że zasoby, których można zażądać bez danych logowania, są publicznie dostępne i bezpieczne do wczytania.

credentialless na ratunek

Właśnie w tym przypadku przydają się COEP: credentialless. credentialless to nowa wartość nagłówka Cross-Origin-Embedder-Policy. Podobnie jak w przypadku atrybutu require-corp, można go użyć do włączenia izolacji między domenami, ale zamiast wymagać nagłówka CORP:cross-origin w przypadku żądań między domenami bez atrybutu CORS, żądania te są wysyłane bez poświadczeń (np. plików cookie).

Izolację między domenami można włączyć również za pomocą tych 2 nagłówków:

Cross-Origin-Embedder-Policy: credentialless
Cross-Origin-Opener-Policy: same-origin

Oznacza to, że żądany serwer w innej domenie nie będzie mógł odpowiedzieć za pomocą zasobu poufnego, a żądający może zawsze założyć, że odpowiedź zawiera tylko informacje dostępne publicznie.

Jest to również zgodne z planem przeglądarek przedstawiających wycofywanie plików cookie innych firm.

Prezentacja

W tej wersji demonstracyjnej możesz wypróbować różne opcje nagłówka: https://cross-origin-isolation.glitch.me

Najczęstsze pytania

Czy mogę wysłać prośbę o uprawnienia w środowisku credentialless?

Oczywiście, ale w takim przypadku musisz zmienić tryb żądania, aby wymagał sprawdzenia CORS w odpowiedzi. W przypadku tagów HTML, takich jak <audio>, <img>, <link>, <script><video>, po prostu dodaj crossorigin="use-credentials", aby poinformować przeglądarkę, że ma wysyłać żądania z danymi logowania.

Na przykład nawet wtedy, gdy dokument na 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 uprawnieniami.

W przypadku interfejsu API fetch() można użyć request.mode = 'cors'.

Dlaczego COEP: credentialless jest nadal przydatna dla mojej witryny?COEP: require-corp

COEP: require-corp nie wymaga ręcznego przełączania trybu żądania na CORS, jeśli pliki cookie są potrzebne do niektórych zasobów podrzędnych z innych domen.

Czy w środowisku credentialless mogę też wczytywać elementy iframe z różnych źródeł bez specjalnych nagłówków?

Nie. Ładowanie ramek iframe z wielu źródeł w środowisku credentialless nadal wymaga spełnienia tych samych warunków co w przypadku 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

Dobra wiadomość jest taka, że trwa dyskusja na temat zezwalania na wczytywanie elementów iframe z różnych źródeł bez tych nagłówków, poprzez nadanie im atrybutu crossorigin="anonymous". Pozwoli to na ładowanie elementów iframe z innych domen bez nagłówków, ale bez danych logowania.

Czy z tej funkcji będą korzystać inne przeglądarki?

Co dalej?

Wprowadzimy 2 dodatkowe aktualizacje, aby rozwiązać inne problemy związane z izolacją zasobów z innych domen:

Osoby, które zarejestrowały się w programie Chrome Origin, aby przedłużyć okres próbny zmiany SharedArrayBuffer ze względu na powyższe przeszkody, mogą się zastanawiać, kiedy on się zakończy. Początkowo ogłosiliśmy, że ta funkcja zostanie zakończona w Chrome 96, ale postanowiliśmy odłożyć to do Chrome 106.

Zasoby

Zdjęcie: Martin Adams na Unsplash