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:
- Poproś o token dla Twojego ź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 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
- W kodzie HTML:
- 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?
- Żądanie Mozilla o pozycję: Oczekujące
- Żądanie Webkit o pozycję: Brak sygnału
- W3C TAG Żądanie dotyczące pozycji: satysfakcjonujące
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
- Odizolowanie witryny od zasobów z innych domen przy użyciu strategii COOP i COEP
- Dlaczego potrzebujesz „izolowanych od zasobów z innych domen”, aby korzystać z zaawansowanych funkcji
- Przewodnik po włączeniu izolacji zasobów z innych domen
- Aktualizacje obiektu SharedSlateBuffer w Chrome 88 na Androidzie i w Chrome 92 na komputerze
- Ładowanie zasobów z innych domen bez nagłówków CORP za pomocą
COEP: credentialless