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()
i 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:
- Poproś o token dla swojego źródła.
- 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
- W kodzie HTML:
- 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?
- Żądanie do programu Mozilla: Oczekuje
- Żądanie pozycji w Webkit: Brak sygnału
- TAG W3C Prośba o pozycję: zaspokojona
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
- Ustawianie witryny jako izolowanej od zasobów z innych domen przy użyciu zasad dotyczących współpracy i COEP
- Dlaczego potrzebujesz „izolacji od zasobów z innych domen” do korzystania z zaawansowanych funkcji
- Przewodnik po włączaniu izolacji zasobów z innych domen
- Aktualizacje SharedArrayBuffer w Chrome 88 na Androida i Chrome 92 na komputer
- Ładowanie zasobów z innych źródeł bez nagłówków CORP za pomocą
COEP: credentialless