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

Arthur Sonzogni
Arthur Sonzogni

Deweloperzy korzystający z interfejsu COEP mogą teraz umieszczać elementy iframe innych firm, które nie używają tego interfejsu.

Dlaczego potrzebujemy COEP

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 wdrożeniu, zwane izolacją zasobów z innych domen, które wymaga między innymi wdrożenia COEP. Umożliwia to witrynom korzystanie z funkcji uprzywilejowanych, w tym SharedArrayBuffer, performance.measureUserAgentSpecificMemory()minutników o wysokiej precyzji z lepszą rozdzielczością.

Aby umożliwić izolację między domenami, witryny muszą wysyłać 2 nagłówki HTTP:

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

Problemy z włączeniem COEP

Chociaż izolacja między domenami zwiększa bezpieczeństwo stron internetowych i umożliwia stosowanie zaawansowanych funkcji, wdrożenie tej funkcji może być trudne. Jednym z największych wyzwań jest to, że wszystkie elementy iframe w różnych domenach muszą również stosować nagłówki COEP i CORP. Przeglądarka nie wczyta elementów iframe bez tych nagłówków.

Ramki iframe są zwykle dostarczane przez zewnętrzną firmę, która może mieć trudności z wdrażaniem COEP.

Anonimowy element iframe na ratunek

Dlatego potrzebny jest anonimowy element iframe. Dodanie atrybutu anonymous do elementu <iframe> powoduje, że iframe jest ładowany z innej, tymczasowej partycji pamięci masowej i nie podlega już ograniczeniom COEP.

Przykład:

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

Ramka IFrame jest tworzona w nowym kontekście tymczasowym i nie ma dostępu do żadnych plików cookie powiązanych z witryną najwyższego poziomu. Początkiem tego okresu jest pusty cookie jar. Podobnie interfejsy API do przechowywania, takie jak LocalStorage, CacheStorage, IndexedDB itp., wczytują i przechowują dane w nowej partycji tymczasowej. Partycja jest ograniczona do bieżącego dokumentu najwyższego poziomu i źródła elementu iframe. Pamięć zostanie wyczyszczona po usunięciu dokumentu najwyższego poziomu.

Elementy iframe anonimowe nie podlegają zasadom umieszczania treści w ramach COEP. Jest to nadal bezpieczne, ponieważ za każdym razem są one ładowane z nowego pustego kontekstu. Będą wczytywane bez personalizacji danych. Zawierają tylko dane publiczne, które nie są wartościowe dla atakującego.

Prezentacja

Anonimowy tag iframe możesz sprawdzić na stronie https://anonymous-iframe.glitch.me/.

Rejestrowanie się w wersji próbnej origin

Aby zapewnić deweloperom możliwość korzystania z anonimowych elementów iframe i wprowadzenia izolacji między domenami, udostępniamy je w Chrome w wersjach od 106 do 108 jako testowanie międzyźródłowe.

Aby umożliwić witrynie korzystanie z anonimowych ramek iframe, zarejestruj się w ramach okresu próbnego:

  1. Poproś o token dla swojego ź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 kodzie JavaScript: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 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 zewnętrznego

Testowanie origin jest też dostępne dla skryptów innych firm. Oznacza to, że mogą go włączać skrypty umieszczone na stronie.

Dowiedz się więcej o tym, jak zarejestrować się do korzystania z okresu próbnego usługi zewnętrznej.

Najczęstsze pytania

Czy inne przeglądarki będą mogły korzystać z tej funkcji?

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

Tak. Jest dziedziczona. Gdy iframe jest anonimowy, dotyczy to wszystkich iframe’ów w całym poddrzewie, nawet bez atrybutu anonymous.

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

Wyskakujące okienka są otwierane tak, jakby było ustawione noopener. Są one tworzone na podstawie nowego zwykłego kontekstu najwyższego poziomu i nie są anonimowe. Nie mogą się one komunikować z anonimowym elementem iframe.

Zasoby