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 w wersji Chrome 116 lub nowszej.

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 innego źródła, ustawienie Cross-Origin-Opener-Policy: restrict-properties również ochroni Twoją witrynę przed zliczaniem iframe. Będziesz mieć dostęp do tych samych wyskakujących okienek, które są dostępne obecnie.
  • Jeśli zarówno strona otwierająca, jak i otwarta, mają ustawiony nagłówek, a strony pochodzą z różnych domen, działa to podobnie do sytuacji, gdy nagłówek jest ustawiony tylko w jednej z nich. Jeśli mają ten sam origin, uzyskują 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 wyskakującego z wielu usług, które mogą być potrzebne, np. logowania jednokrotnego czy płatności.

Aby włączyć izolację witryn z innych domen, zamiast atrybutu Cross-Origin-Opener-Policy: same-origin możesz teraz używać atrybutu Cross-Origin-Opener-Policy: restrict-properties. 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 na stronie Ł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ę między domenami?

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 wystarczą w przypadku 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