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

Uzyskaj ochronę przed wyciekami danych między witrynami podczas interakcji z wyskakującymi okienkami.

Arthur Hemery
Maud Nalpas
Maud Nalpas

Dostępna jest nowa wartość zasady dotyczącej otwierającego z innej domeny (COOP): restrict-properties. Przynosi to korzyści w zakresie bezpieczeństwa i ułatwia stosowanie izolacji między domenami, a zarazem pozwala witrynie na interakcję z wyskakującymi okienkami innych firm w celu dokonywania płatności, uwierzytelniania lub w innych przypadkach użycia.

Aby zacząć eksperymentować z restrict-properties, weź udział w wersji próbnej origin, która jest dostępna od wersji Chrome 116.

Dlaczego warto używać restrict-properties

restrict-properties ma 2 główne zastosowania:

Zapobieganie wyciekom informacji w wielu witrynach bez naruszania bezpieczeństwa

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

Szkodliwa witryna może wykorzystać tę funkcję do przeprowadzania ataków, takich jak przecieki między witrynami. Aby zmniejszyć to ryzyko, możesz użyć nagłówka Cross-Origin-Opener-Policy (COOP).

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

  • Ustaw same-origin,, który blokuje wszystkie interakcje z wyskakującymi okienkami w różnych domenach.
  • Ustaw same-origin-allow-popups, aby zablokować wszystkie interakcje między domenami, które otwierają Twoją witrynę w wyskakującym okienku.
  • Ustaw unsafe-none, aby zezwolić na wszystkie interakcje z wyskakującymi okienkami między domenami.

W związku z tym witryny, które muszą być otwierane w wyskakującym okienku i które mogą wchodzić w interakcję z otwarciem, nie mogły stosować zasad COOP. W efekcie kluczowe przypadki użycia, takie jak logowanie jednokrotne i płatności, były narażone na wycieki danych między witrynami.

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 między witrynami, są niedostępne, ale dozwolona jest podstawowa komunikacja między oknami za pomocą postMessageclosed.

Dzięki temu zwiększysz bezpieczeństwo witryny, zachowując przy tym kluczowe przypadki użycia. Na przykład:

  • Jeśli udostępniasz usługę w oknie wyskakującym, ustawienie Cross-Origin-Opener-Policy: restrict-properties ochroni Cię przed różnymi atakami polegającymi na wycieku danych z wielu witryn. Nadal możesz otwierać wszystkie strony, które były dostępne wcześniej.
  • Jeśli potrzebujesz dostępu do wyskakującego okienka z dostępem do wielu witryn, ustawienie Cross-Origin-Opener-Policy: restrict-properties zapewni Twojej witrynie ochronę przed zliczaniem iframe. Będziesz mieć dostęp do tych samych wyskakujących okienek, które możesz otworzyć dzisiaj.
  • Jeśli zarówno otwierający, jak i otwierany mają ustawiony nagłówek, a strony pochodzą z różnych domen, działa to podobnie do sytuacji, gdy nagłówek jest ustawiony tylko w jednym z nich. Jeśli mają ten sam origin, mają 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 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 odizolowania od zasobów z innych domen strona internetowa może korzystać z funkcji uprzywilejowanych, takich jak SharedArrayBuffer, performance.measureUserAgentSpecificMemory()precyzyjne zegary o lepszej rozdzielczości, przy jednoczesnym odizolowaniu pochodzenia od innych zasobów, chyba że te ostatnie zostały włączone.

Do tej pory, aby korzystać z tych interfejsów API, trzeba było ustawić Cross-Origin-Opener-Policy: same-origin. Spowoduje to jednak przerwanie działania okna logowania w innej domenie, które może być potrzebne, np. logowania jednokrotnego czy płatności.

Aby włączyć izolację witryn z innych domen, możesz teraz użyć obiektu Cross-Origin-Opener-Policy: restrict-properties zamiast obiektu Cross-Origin-Opener-Policy: same-origin. Zamiast zerwać relację z otwarciem, ogranicza ją tylko do minimalnego zbioru komunikatów window.postMessage()window.closed.

Możesz włączyć izolację między domenami 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 w sekcji Ładowanie zasobów z innych źródeł bez nagłówków CORP za pomocą COEP: credentialless.

Prezentacja

Wypróbuj różne opcje nagłówka w tym demo izolacji między domenami.

Eksperymentowanie z wersją próbną origin

Aby eksperymentować z Cross-Origin-Opener-Policy: restrict-properties, weź udział w okresie próbnym funkcji 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 ujednolicania standardów.

Najczęstsze pytania

Moja witryna musi komunikować się z wyskakującymi okienkami z tego samego źródła. Czy muszę używać COOP: restrict-properties, aby włączyć izolację zasobów z różnych źródeł?

Ustawienie COOP: restrict-properties zarówno w wyskakującym okienku, jak i na stronie głównej nie spowoduje żadnych ograniczeń. Ustawienie go tylko w oknie wyskakującym lub tylko na stronie głównej uniemożliwi dostęp do usług innych niż postMessageclosed w otwarcie, nawet jeśli mają one ten sam pierwotny adres,

Czy zestaw dozwolonych właściwości jest ustalony?

Na podstawie dotychczasowych opinii uważamy, że window.postMessage i window.closed powinny wystarczyć do większości procesów, ale nadal rozważamy udostępnienie ich innym usługom. Jeśli masz przypadek użycia, którego nie można rozwiązać, korzystając tylko z funkcji postMessageclosed, prześlij opinię w wątku o chęci przeprowadzenia eksperymentu.

Zasoby