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

Bezpieczeństwo bez poświadczeń w przypadku ramek iframe jest domyślnie włączone od wersji 110 przeglądarki Chrome. Rozwiązanie to eliminuje najczęstszy problem, z którym spotykają się deweloperzy pracujący z zasadami dotyczącymi umieszczania elementów iframe z innych źródeł (Cross-Origin-Embedder-Policy, COEP): umieszczanie elementów iframe z innych źródeł, które nie mają ustawionej opcji COEP.

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ą środowisko izolowane oparte na opcjonalnym włączeniu, zwane izolacją zasobów z innych domen, które wymaga wdrożenia COEP. Izolacja między domenami umożliwia witrynom korzystanie z funkcji uprzywilejowanych, takich jak SharedArrayBuffer, performance.measureUserAgentSpecificMemory()precyzyjne zegary z lepszą rozdzielczością.

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

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

COEP:credentialless może też służyć jako alternatywa dla require-corp. Aby dowiedzieć się więcej, zapoznaj się z dokumentacją.

Problemy z włączeniem COEP

Izolacja zasobów z innych domen zwiększa bezpieczeństwo stron internetowych i umożliwia stosowanie zaawansowanych funkcji, ale jej wdrożenie może być trudne. Jednym z największych wyzwań jest to, że wszystkie elementy iframe w wielu domenach muszą stosować nagłówki COEP i CORP. Przeglądarka nie wczyta elementów iframe bez tych nagłówków.

Tag iframe bez danych logowania na ratunek

Wprowadzamy tag <iframe credentialless>, aby ułatwić umieszczanie ramek iframe innych firm, które nie mają ustawionego parametru COEP. Dodanie atrybutu credentialless do elementu <iframe> powoduje załadowanie ramki iframe z innego, pustego kontekstu. W szczególności jest on wczytywany bez plików cookie. Pozwala to usunąć ograniczenie COEP.

Przykład:

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

Ten iframe jest tworzony w nowym kontekście efemerycznym i nie ma dostępu do żadnych plików cookie powiązanych z witryną najwyższego poziomu. Zamiast tego zaczyna się od pustego pliku cookie. Podobnie interfejsy API pamięci, 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. Po zwolnieniu dokumentu najwyższego poziomu całe to miejsce na dane zostaje zwolnione.

Elementy iframe bez danych logowania nie podlegają zasadom umieszczania treści z COEP. Nadal są one bezpieczne: ponieważ są wczytywane z nowego pustego kontekstu za każdym razem, nie powinny zawierać danych spersonalizowanych, których szukają hakerzy. Jeśli iframe zawiera tylko dane publiczne, nie jest wartościowy dla atakującego.

Prezentacja

Możesz obejrzeć prezentację iframe bez danych logowania.

Najczęstsze pytania

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

Czy <iframe> jest zagnieżdżony w <iframe credentialless> bez hasła?

Tak. Jest dziedziczona. Gdy iframe nie wymaga poświadczeń, dotyczy to wszystkich takich ramek w całym poddrzewie, nawet bez atrybutu credentialless.

Czy wyskakujące okienka są tworzone bez danych logowania <iframe credentialless>?

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

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

window.credentialless ma wartość true (prawda) w przypadku 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