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 korzystanie ze specjalnych funkcji, takich jak 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 metody może być trudne. Jednym z największych wyzwań jest to, że wszystkie elementy iframe w różnych domenach muszą też stosować nagłówki COEP i CORP. Przeglądarka nie wczyta elementów iframe bez tych nagłówków.
Elementy iframe są zwykle dostarczane przez firmy zewnętrzne, które mogą mieć problemy z wdrożeniem COEP.
Anonimowy element iframe na ratunek
Właśnie w tym przypadku przydaje się anonimowy 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
itd., 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.
Anonimowe ramki iframe nie podlegają regułom umieszczania treści z COEP. Jest to nadal bezpieczne, ponieważ za każdym razem są one ładowane z nowego pustego kontekstu. Będą one wczytywane bez personalizowania danych. Zawierają one 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 wersji próbnej.
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 podzielić się 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 może być włączone przez 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?
- Mozilla Request for position: 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 ramek iframe 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ą one komunikować się z anonimowym iframe.
Zasoby
- Uzyskiwanie przez witrynę „izoliowania źródeł” za pomocą zasad COOP i COEP
- Dlaczego potrzebujesz „kontekstu izolowanego 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 domen bez nagłówków CORP za pomocą
COEP: credentialless