Elementy iframe bez danych logowania: ł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.

Elementy bez danych logowania w elemencie iframe są domyślnie włączone od wersji Chrome 110. Rozwiązuje on najpopularniejsze skargi deweloperów, którzy współpracują z zasadami korzystania z zasad z innych domen (COEP), ponieważ obejmują osadzone elementy iframe innych firm, które nie ustawiają COEP.

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 wdrożenia COEP. Izolacja zasobów z innych domen umożliwia stronom korzystanie z funkcji uprzywilejowanych, takich jak SharedArrayBuffer, performance.measureUserAgentSpecificMemory() i precyzyjne liczniki czasu z lepszą rozdzielczością.

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

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

Zamiast parametru require-corp można też używać parametru COEP:credentialless. Więcej informacji znajdziesz w dokumentacji.

Wyzwania związane z włączeniem COEP

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

Na pomoc przydaje się tag iframe bez danych uwierzytelniających

Wprowadzamy tag <iframe credentialless>, aby ułatwić umieszczanie zewnętrznych elementów iframe, w których nie ustawiono COEP. Gdy dodasz atrybut credentialless do elementu <iframe>, element iframe będzie wczytywany z innego, pustego kontekstu. W szczególności jest ono wczytywane bez plików cookie. Pozwala to usunąć ograniczenie dotyczące COEP.

Przykład:

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

Ten element iframe został utworzony w nowym kontekście tymczasowym i nie ma dostępu do żadnych plików cookie powiązanych z witryną najwyższego poziomu. Zamiast tego zaczyna się od pustego pojemnika na pliki cookie. Podobnie interfejsy API pamięci masowej, takie jak LocalStorage, CacheStorage czy IndexedDB, wczytują i przechowują dane na nowej partycji efemerycznej. Partycja jest ograniczona do bieżącego dokumentu najwyższego poziomu oraz źródła elementu iframe. Cała pamięć jest czyszczona po wyładowaniu dokumentu najwyższego poziomu.

Elementy iframe bez danych logowania nie podlegają regułom umieszczania COEP. Są one wciąż bezpieczne: za każdym razem są ładowane z nowego, pustego kontekstu, więc nie powinny zawierać spersonalizowanych danych, których szukają hakerzy. Jeśli element iframe zawiera tylko dane publiczne, atakujący nie jest wartościowy.

Pokaz

Zobacz prezentację elementu iframe bez danych logowania.

Najczęstsze pytania

Czy ta funkcja zostanie zastosowana przez inne przeglądarki?

Czy obiekt <iframe> jest zagnieżdżony w obiekcie <iframe credentialless> bez danych logowania?

Tak. Jest dziedziczona. Jeśli element iframe nie ma danych logowania, ma to zastosowanie do wszystkich elementów iframe w całym poddrzewie, nawet bez atrybutu credentialless.

Czy wyskakujące okienka także <iframe credentialless> nie wymagają danych logowania?

Wyskakujące okienka są otwierane tak, jakby zasada noopener była skonfigurowana. Są tworzone w nowym, zwykłym kontekście najwyższego poziomu i nie wymagają danych logowania. Nie mogą komunikować się z elementem iframe bez danych logowania.

Jak wykryć, że dokument został umieszczony w elemencie iframe bez danych logowania?

window.credentialless ma wartość „true” (prawda) w elemencie iframe bez danych logowania. W przeciwnym razie ma wartość „false” (fałsz). Jego wartość to undefined w przeglądarce, która nie obsługuje <iframe credentialless>.

Zasoby