Bezpieczne interakcje z wyskakującymi okienkami za pomocą właściwości ograniczających

Zapewnia izolację między źródłami i ochronę przed wyciekami danych między witrynami podczas interakcji z wyskakującymi okienkami.

Dostępna jest nowa wartość zasady dotyczącej otwierającego z innej domeny (COOP): restrict-properties. Zapewnia to korzyści związane z bezpieczeństwem i ułatwia wdrożenie izolacji między źródłami, a jednocześnie umożliwia witrynie interakcję z wyskakującymi okienkami innych firm w przypadku płatności, uwierzytelniania i innych zastosowań.

Aby rozpocząć eksperymentowanie z restrict-properties, weź udział w wersji próbnej origin, która rozpocznie się w Chrome 116.

Dlaczego warto korzystać z restrict-properties

restrict-properties ma 2 główne zastosowania:

Zapobieganie wyciekom informacji z różnych witryn bez powodowania problemów

Domyślnie każda witryna może otworzyć Twoją aplikację w wyskakującym okienku i uzyskać do niej odwołanie.

Złośliwa witryna może wykorzystać to na swoją korzyść, aby przeprowadzać ataki, takie jak wycieki danych z różnych witryn. Aby zmniejszyć to ryzyko, możesz użyć nagłówka Cross-Origin-Opener-Policy (COOP).

Do tej pory opcje Cross-Origin-Opener-Policy były ograniczone. Możesz:

  • Ustaw wartość same-origin,, która blokuje wszystkie interakcje z wyskakującymi okienkami pochodzącymi z innych domen.
  • Ustaw wartość same-origin-allow-popups, która blokuje wszystkie interakcje między domenami, które otwierają Twoją witrynę w wyskakującym okienku.
  • Ustaw wartość unsafe-none, która zezwala na wszystkie interakcje między źródłami z wyskakującymi okienkami.

Uniemożliwiało to witrynom, które muszą być otwierane w wyskakującym okienku i wchodzić w interakcję ze stroną, która je otworzyła, wymuszanie COOP. W efekcie kluczowe przypadki użycia, takie jak logowanie jednokrotne i płatności, nie były chronione przed wyciekami danych z wielu witryn.

Cross-Origin-Opener-Policy: restrict-properties rozwiązuje ten problem.

W przypadku restrict-properties właściwości, które można wykorzystać do zliczania klatek i innych ataków polegających na wycieku danych z różnych witryn, są niedostępne, ale podstawowa komunikacja między oknami za pomocą postMessageclosed jest dozwolona.

Zwiększa to bezpieczeństwo witryny przy jednoczesnym zachowaniu kluczowych przypadków użycia. Na przykład:

  • Jeśli świadczysz usługę w wyskakującym okienku, ustawienie Cross-Origin-Opener-Policy: restrict-properties ochroni Cię przed różnymi atakami polegającymi na wycieku danych z różnych witryn. Nadal możesz otwierać wszystkie strony, które były wcześniej dostępne.
  • Jeśli musisz uzyskać dostęp do wyskakującego okienka z innej domeny, ustawienie Cross-Origin-Opener-Policy: restrict-properties w podobny sposób ochroni Twoją witrynę przed zliczaniem elementów iframe. Będziesz mieć możliwość otwierania tych samych wyskakujących okien, co obecnie.
  • Jeśli zarówno strona otwierająca, jak i otwierana ustawią nagłówek, a strony są z różnych źródeł, zachowanie jest podobne do sytuacji, w której nagłówek ustawiła tylko jedna z nich. Jeśli pochodzą z tej samej domeny, przyznawany jest pełny dostęp.

Izolowanie witryny od zasobów z innych domen

Dlaczego potrzebujemy izolacji od zasobów z innych domen

Niektóre interfejsy API zwiększają ryzyko ataków z użyciem kanału bocznego, takich jak Spectre. Aby ograniczyć to ryzyko, przeglądarki oferują środowisko izolowane oparte na zasadzie rezygnacji, zwane izolacją od zasobów z innych domen. W stanie izolacji od zasobów z innych domen strona może korzystać z funkcji uprzywilejowanych, takich jak SharedArrayBuffer, performance.measureUserAgentSpecificMemory()liczniki o wysokiej precyzji o lepszej rozdzielczości, a jednocześnie izolować pochodzenie od innych, chyba że te inne wyrażą na to zgodę.

Do tej pory, aby korzystać z tych interfejsów API, trzeba było ustawić Cross-Origin-Opener-Policy: same-origin. Spowoduje to jednak przerwanie wszystkich przepływów wyskakujących okienek z różnych domen, które mogą być potrzebne, np. logowania jednokrotnego i płatności.

Aby włączyć izolację od zasobów z innych domen, zamiast Cross-Origin-Opener-Policy: same-origin możesz teraz używać Cross-Origin-Opener-Policy: restrict-properties. Zamiast zrywać relację otwierającą, ogranicza ją do minimalnego podzbioru komunikacji window.postMessage()window.closed.

Izolację między źródłami możesz włączyć za pomocą tych 2 nagłówków:

Cross-Origin-Opener-Policy: restrict-properties
Cross-Origin-Embedder-Policy: require-corp

lub

Cross-Origin-Opener-Policy: restrict-properties
Cross-Origin-Embedder-Policy: credentialless

Dowiedz się więcej o credentialless na stronie Wczytywanie zasobów z innych domen bez nagłówków CORP za pomocą COEP: credentialless.

Prezentacja

Wypróbuj różne opcje nagłówków w tej wersji demonstracyjnej izolacji z różnych domen.

Eksperymentowanie z testowaniem origin

Aby eksperymentować z Cross-Origin-Opener-Policy: restrict-properties, weź udział w testowaniu origin.

Obsługa przeglądarek

Cross-Origin-Opener-Policy: restrict-properties jest obecnie obsługiwana tylko w Chrome. Inne przeglądarki aktywnie uczestniczą w dyskusji na temat standaryzacji.

Najczęstsze pytania

Moja witryna musi komunikować się z wyskakującymi okienkami z tej samej domeny. Czy powinienem użyć COOP: restrict-properties, aby włączyć witrynę izolowaną od zasobów z innych domen?

Ustawienie COOP: restrict-properties zarówno w wyskakującym okienku, jak i na stronie głównej nie spowoduje ograniczeń. Ustawienie tej zasady tylko w wyskakującym okienku lub tylko na stronie głównej uniemożliwi dostęp do innych usług niż postMessageclosed w otwierającym okienku, nawet jeśli pochodzą z tego samego źródła.

Czy zestaw dozwolonych właściwości jest stały?

Na podstawie dotychczasowych opinii podejrzewamy, że window.postMessagewindow.closed wystarczą w przypadku większości procesów, ale nadal rozważamy udostępnienie tej funkcji w przypadku innych usług. Jeśli masz przypadek użycia, którego nie można rozwiązać za pomocą tylko postMessageclosed, zostaw opinię w wątku dotyczącym zamiaru przeprowadzenia eksperymentu.

Zasoby