Od Chrome 135 możesz używać nowej wartości sandbox
:allow-same-site-none-cookies
. Gdy ta zasada jest określona, a pliki cookie firm zewnętrznych są niedostępne, przeglądarka będzie wysyłać tylko pliki cookie SameSite=None
w żądaniach HTTP pochodzących z ramek iframe w piaskownicy źródeł własnych.
Co to jest element iframe umieszczony w piaskownicy?
Elementy iframe w piaskownicy to elementy iframe z dodatkowymi ograniczeniami. Są one traktowane jako pochodzące z źródła null
,
nieprzezroczystego. Domyślnie potencjalnie szkodliwe funkcje, takie jak skrypty, formularze i wyskakiwacze, nie są dostępne w elementach iframe umieszczonych w piaskownicy.
Użyj atrybutu sandbox
, aby określić, które funkcje iframe w piaskownicy powinny być dostępne. Na przykład:
<iframe sandbox="allow-scripts" src="example-sandboxed-frame.html"/>
Używanie piaskownicy jest zawsze dobrym pomysłem, ponieważ pozwala precyzyjnie wybrać uprawnienia wymagane do prawidłowego wczytania treści, które są w niej umieszczone, ograniczając jednocześnie zakres potencjalnych luk.
Dlaczego potrzebujemy tych nowych zasad?
Przed wprowadzeniem allow-same-site-none-cookies
w elemencie iframe w piaskownicy można było skonfigurować 2 scenariusze dotyczące plików cookie:
- Bez tokena
allow-same-origin
w atrybuciesandbox
pochodzenie elementu iframe jest serializowane jakonull
, co powoduje, że wszystkie żądania z witryny w piaskownicy są żądaniami z innej witryny. W takim przypadku w żądaniach będą uwzględniane tylko pliki cookie o wartościSameSite=None
. - Jeśli w atrybucie
sandbox
znajduje się tokenallow-same-origin
, żądania są traktowane jako pochodzące z prawdziwego punktu początkowego iframe, co umożliwia wysyłanie plików cookie z dowolną wartościąSameSite
.
Gdy pliki cookie innych firm są zablokowane, iframe w piaskownicy bez allow-same-origin
nie może wysyłać żadnych plików cookie, chyba że włączysz allow-same-site-none-cookies
.
Element iframe z allow-same-origin
będzie nadal mógł zawierać pliki cookie w żądaniach dotyczących tej samej witryny, nawet jeśli pliki cookie innych firm są zablokowane. Jednak cały zestaw plików cookie domeny będzie narażony na potencjalnie szkodliwą aktywność w sieci.
Dzięki allow-same-site-none-cookies
element iframe może wysyłać pliki cookie SameSite=None
w żądaniach HTTP, ale nie będzie zawierać potencjalnie poufnych plików cookie SameSite=Strict
ani SameSite=Lax
.
Przykład praktyczny
Weź pod uwagę witrynę practice-coding.example
, która umożliwia użytkownikom tworzenie i uruchamianie niestandardowych projektów kodowania oraz umieszczanie kodu innych użytkowników. Aby korzystać z usługi, użytkownicy muszą się zalogować, co powoduje ustawienie pliku cookie sesji SameSite=Strict
.
Inny użytkownik tworzy projekt practice-coding.example/cookie-theft
, który inni użytkownicy mogą nieświadomie osadzić jako tag iframe w swoich projektach. Jeśli pliki cookie SameSite=Strict
i SameSite=Lax
są dostępne dla iframe practice-coding.example/cookie-theft
, użytkownik o złośliwych zamiarach może ukraść pliki cookie sesji innych użytkowników.
W takim przypadku właściciel witryny może chcieć ograniczyć dostęp do potencjalnie poufnych plików cookie. Może jednak chcieć zezwolić na pliki cookie SameSite=None
w ramach sandboxowanych ramek iframe. Na przykład
practice-coding.example/coding-interview
piaskownica iframe może wymagać plików cookie
SameSite=None
, aby kandydaci mogli ponownie sprawdzić swój kod.
allow-same-site-none-cookies
zapobiega ujawnianiu całego zbiornika plików cookie, zezwalając jednocześnie na niezbędne pliki cookie SameSite=None
.
Jak zezwolić tylko na SameSite=None
w ramkach piaskownicy własnych?
Aby włączyć pliki cookie SameSite=None
w żądaniach z własnych stron w piaskownicy, w tagu iframe podaj token allow-same-site-none-cookies
. Na przykład:
<iframe sandbox="allow-same-site-none-cookies" src="example-sandboxed-page.html"/>
Zasady allow-same-site-none-cookies
możesz też ustawić za pomocą nagłówka HTTP Content-Security-Policy
:
Content-Security-Policy: sandbox allow-same-site-none-cookies;
Wypróbuj to samodzielnie, korzystając z naszego demo.
Zaangażowanie i przesyłanie opinii
Aby przesłać opinię lub zgłosić problem, zgłoś go na GitHubzie lub dołącz do dyskusji na GitHubie.