iframe sandbox: na co pozwala każdy token

Atrybut sandbox w iframe

iframe sandbox: każdy token z interaktywnym demo | We.Inc

Włączaj i wyłączaj każdy token iframe sandbox i zobacz, jak skrypty, formularze, popupy i alerty zaczynają lub przestają działać. Każdy token wyjaśniony.

Pusty atrybut sandbox mocno blokuje iframe: brak skryptów, brak wysyłania formularzy, brak popupów, brak alertów i nieprzezroczyste pochodzenie (opaque origin), które nie przechodzi żadnego sprawdzenia same-origin. Każdy dodany token allow- przywraca jedną możliwość. Przełączaj tokeny poniżej, aby zobaczyć dokładnie, co przestaje działać, a potem skopiuj najmniejszy zestaw, którego potrzebuje Twoje osadzenie.

Typowe zastosowania i potrzebne im tokeny

Atrybut sandbox to najtańszy zysk bezpieczeństwa, jaki możesz dodać do iframe wyświetlającego treść, której nie napisałeś: HTML użytkownika, miejsce reklamowe, podgląd wygenerowanej strony. Trudność polega na tym, by wiedzieć, których tokenów potrzebuje dane osadzenie, bo brak jednego z nich zwykle kończy się cichym błędem. Ramka poniżej uruchamia prawdziwe testy, więc widzisz każdy błąd zamiast zgadywać. Podstawy osadzania znajdziesz w naszym przewodniku po iframe HTML i wideo.

Najczęściej zadawane pytania

Co robi pusty atrybut sandbox?

Nakłada wszystkie ograniczenia naraz. Osadzony dokument nie może uruchamiać skryptów, wysyłać formularzy, otwierać popupów ani okien modalnych, nawigować głównego okna, blokować kursora ani orientacji, rozpoczynać pobierania, a do tego jest traktowany jako pochodzący z unikalnego pochodzenia, które nigdy nie pasuje do żadnego innego.

Dlaczego allow-scripts z allow-same-origin jest niebezpieczne?

Gdy osadzony dokument ma to samo pochodzenie co Twoja strona, te dwa tokeny razem pozwalają jego skryptowi sięgnąć wyżej i usunąć atrybut sandbox, więc ostatecznie nie jest bezpieczniejszy niż zwykły iframe. To połączenie jest w porządku dla treści z naprawdę innego pochodzenia, która i tak nie może dotknąć Twojej strony.

Mój formularz w sandbox nic nie robi po kliknięciu wyślij. Dlaczego?

Bez allow-forms formularz nadal się wyświetla, ale jego wysłanie nie uruchamia walidacji i nie przesyła żadnych danych na serwer. Dodaj allow-forms. Jeśli formularz korzysta też z cookies lub pamięci swojej własnej strony, będzie potrzebował również allow-same-origin.

Czy iframe w sandbox może przekierować całą moją stronę?

Nie, chyba że dodasz allow-top-navigation albo allow-top-navigation-by-user-activation, który pozwala na to dopiero po kliknięciu w ramce. Pominięcie obu uniemożliwia osadzeniu zastąpienie Twojej strony inną witryną.

Czy sandbox wystarczy, by bezpiecznie wyświetlić niezaufany HTML?

To główna warstwa, ale nie jedyna. Serwuj niezaufaną treść z osobnego pochodzenia lub przez srcdoc, trzymaj allow-same-origin wyłączony, gdy skrypty są włączone, i dodaj Content-Security-Policy do osadzonego dokumentu, jeśli kontrolujesz sposób jego serwowania.

Jak nieprzezroczyste pochodzenie wszystko zmienia

Ciche błędy to norma

sandbox, allow i CSP mają różne zadania

Wszystkie tokeny sandbox

Tokeny oddziela się spacjami, a wielkość liter nie ma znaczenia. Wszystko, czego nie wymieniono, pozostaje zablokowane.

Tokeny sandbox i na co każdy z nich pozwala

Wzorce do skopiowania

Podgląd HTML użytkownika z wyłączonymi skryptami

Przycisk w ramce ma handler onclick, ale przy pustym sandbox nigdy się nie uruchamia.

Zewnętrzny widżet z innego pochodzenia

Widżet uruchamia własny skrypt i wysyła swój formularz, a linki mogą otwierać prawdziwe karty. Nie może przekierować Twojej strony.

Te same ograniczenia wysłane jako nagłówek odpowiedzi

Serwer może objąć własną stronę sandboxem przez CSP, co działa nawet wtedy, gdy strona jest otwierana bezpośrednio, a nie w ramce.

Przełączaj tokeny i testuj ramkę

Ramka poniżej to dokument srcdoc. allow-same-origin nie jest tu dostępny, bo ramka srcdoc współdzieliłaby wtedy pochodzenie tej strony, czyli dokładnie to połączenie, przed którym ostrzegają wskazówki.

Skrypty są zablokowane, więc nic w tej ramce nie może się uruchomić.

Tokeny

Bieżący atrybut

Ramka testowa sandbox

Skrypty się uruchomiły. Pochodzenie tej ramki to: {v}

Wyślij formularz

Otwórz popup

Pokaż alert

Formularz wysłany.

Formularz nie został wysłany.

Popup otwarty (i ponownie zamknięty).

Popup zablokowany: window.open zwrócił null.

Alert został pokazany.

Alert zablokowany: wrócił od razu, niczego nie pokazując.

Pozdrowienia z ramki w sandbox

Zacznij za darmo · Bez karty kredytowej

Powiązane: Poradniki

Produkt

Dla kogo

Funkcje

Zasoby

Firma

Mapa strony