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

Uzyskaj ochronę przed wyciekami danych w przypadku 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. Zapewnia on korzyści w zakresie bezpieczeństwa i ułatwia stosowanie izolacji od zasobów z innych domen, a jednocześnie umożliwia witrynie interakcję z wyskakującymi okienkami innych firm na potrzeby płatności, uwierzytelniania i innych zastosowań.

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 ograniczyć to ryzyko, możesz użyć nagłówka Cross-Origin-Opener-Policy (COOP).

Do tej pory możliwości dotyczące domeny 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.

Funkcja 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 wcześniej dostępne strony.
  • 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 możesz otworzyć dzisiaj.
  • 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, 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 zmniejszyć to ryzyko, przeglądarki udostępniają oparte na akceptowaniu izolowane środowisko nazywane 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 można było korzystać z tych interfejsów API, trzeba było skonfigurować 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, możesz teraz używać 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Ładowaniu 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.

Eksperymentuj z testowaniem origin

Aby eksperymentować z Cross-Origin-Opener-Policy: restrict-properties, weź udział w próbnym okresie użytkowania Origin.

Obsługa przeglądarek

Obecnie format Cross-Origin-Opener-Policy: restrict-properties jest obsługiwany 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 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 da się rozwiązać przy użyciu tylko metod postMessage i closed, prześlij opinię w wątku dotyczącym intencji to eksperyment.

Zasoby