Testowanie anonimowego źródła elementów iframe: łatwe umieszczanie elementów iframe w środowiskach COEP

Arthur Sonzogni
Arthur Sonzogni

Programiści korzystający z narzędzia COEP mogą teraz umieszczać elementy iframe innych firm, które nie korzystają z tego narzędzia.

Dlaczego potrzebujemy CEP

Niektóre internetowe interfejsy API, takie jak Spectre, zwiększają ryzyko ataków typu side-channel. Aby ograniczyć to ryzyko, przeglądarki oferują izolowane środowisko zwane izolacją zasobów z innych domen, które wymaga wyrażenia zgody na wykorzystanie danych, co m.in. wymaga wdrożenia COEP. Dzięki temu strony internetowe mogą korzystać z funkcji uprzywilejowanych, takich jak SharedArrayBuffer, performance.measureUserAgentSpecificMemory() i dokładne minutniki z lepszą rozdzielczością.

Aby włączyć izolację zasobów z innych domen, strony internetowe muszą wysyłać te 2 nagłówki HTTP:

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

Wyzwania związane z włączeniem COEP

Izolacja zasobów z innych domen zwiększa bezpieczeństwo stron i umożliwia włączanie zaawansowanych funkcji, ale wdrożenie COEP może być trudne. Jednym z największych wyzwań jest to, że wszystkie elementy iframe z innych domen muszą też wdrażać COEP i CORP. Elementy iframe bez tych nagłówków nie będą wczytywane przez przeglądarkę.

Elementy iframe są zwykle obsługiwane przez firmy zewnętrzne, w przypadku których wdrożenie COEP może nie być łatwe.

Na pomoc ratuje się anonimowy element iframe

Tu do akcji wkracza anonimowy element iframe. Gdy dodasz atrybut anonymous do elementu <iframe>, element iframe będzie ładowany z innej, efemerycznej partycji pamięci masowej i nie podlega już ograniczeniom COEP.

Przykład:

<iframe anonymous src="https://example.com">

Element iframe jest tworzony w nowym kontekście tymczasowym i nie ma dostępu do żadnych plików cookie powiązanych z witryną najwyższego poziomu. Zaczyna się od pustego jara na pliki cookie. Podobnie interfejsy API pamięci masowej, takie jak LocalStorage, CacheStorage czy IndexedDB, itd. wczytują i przechowują dane na nowej partycji efemerycznej. Partycja jest ograniczona do bieżącego dokumentu najwyższego poziomu i pochodzenia elementu iframe. Pamięć zostanie wyczyszczona po wyładowaniu dokumentu najwyższego poziomu.

Anonimowe elementy iframe nie podlegają regułom umieszczania COEP. Jest to wciąż bezpieczne, ponieważ za każdym razem są ładowane z nowego pustego kontekstu. Będą one wczytywane bez personalizowania danych. Zawierają tylko dane publiczne, które nie są cenne dla atakującego.

Wersja demonstracyjna

Aby zobaczyć anonimowy element iframe, przejdź na: https://anonymous-iframe.glitch.me/

Rejestrowanie się do testowania origin

Aby mieć pewność, że anonimowe elementy iframe pomagają deweloperom zastosować izolację z innych domen, udostępniamy je w Chrome w wersjach od wersji 106 do 108 w ramach wersji próbnej origin.

Zarejestruj się w wersji próbnej origin, aby umożliwić swojej witrynie korzystanie z anonimowych elementów iframe:

  1. Poproś o token dla Twojego źródła.
  2. Użyj tokena na jeden z tych sposobów:
    • W kodzie HTML: html <meta http-equiv="Origin-Trial" content="TOKEN_GOES_HERE">
    • W JavaScripcie: js const meta = document.createElement('meta'); meta.httpEquiv = 'Origin-Trial'; meta.content = 'TOKEN_GOES_HERE'; document.head.append(meta);
    • W nagłówkach HTTP: text Origin-Trial: TOKEN_GOES_HERE
  3. Dodaj do swojej strony anonimowy element iframe: html <iframe anonymous src="https://example.com">

Jeśli chcesz przesłać opinię na temat tej funkcji, zgłoś problem w repozytorium GitHub.

Testowanie origin innych firm

Wersja próbna origin jest też dostępna dla skryptów innych firm. Oznacza to, że można ją włączyć przez skrypty umieszczone na stronie.

Leran opowiada o tym, jak zarejestrować się do testowania origin.

Najczęstsze pytania

Czy ta funkcja zostanie zastosowana przez inne przeglądarki?

Czy elementy iframe są zagnieżdżone w elemencie <iframe anonymous>?

Tak. Jest dziedziczona. Gdy element iframe jest anonimowy, ma to zastosowanie do wszystkich elementów iframe w całym poddrzewie, nawet bez atrybutu anonymous.

Czy wyskakujące okienka utworzone w <iframe anonymous> też są anonimowe?

Wyskakujące okienka są otwierane tak, jakby zasada noopener była skonfigurowana. Powstają z nowego, standardowego kontekstu najwyższego poziomu i nie są anonimowe. Nie mogą komunikować się z anonimowymi elementami iframe.

Zasoby