iframe sandbox: elk token, met een live schakeldemo | We.Inc
Zet elk iframe sandbox-token aan en uit en zie scripts, formulieren, pop-ups en meldingen werken of stoppen. Elk token uitgelegd.
Een leeg sandbox-attribuut zet een iframe flink op slot: geen scripts, geen formulierverzending, geen pop-ups, geen meldingen en een ondoorzichtige origin die elke same-origin-controle laat mislukken. Elk allow-token dat u toevoegt, geeft één bevoegdheid terug. Schakel hieronder de tokens om en zie precies wat er stukgaat, en kopieer dan de kleinste set die uw embed nodig heeft.
Veelvoorkomende toepassingen en de tokens die ze nodig hebben
Wat u insluit
Aanbevolen sandbox-waarde
Statische HTML-preview die u hebt gegenereerd
sandbox (leeg)
Interactieve demo of uitvoer van een code-playground
sandbox="allow-scripts"
Formulier van derden dat zijn antwoorden verstuurt
sandbox="allow-scripts allow-forms allow-same-origin" (alleen voor een andere origin)
Widget met links die in een nieuw tabblad openen
voeg allow-popups allow-popups-to-escape-sandbox toe
Game die de muis vastlegt
voeg allow-pointer-lock toe
Het sandbox-attribuut is de goedkoopste beveiligingswinst die u kunt toevoegen aan een iframe dat inhoud toont die u niet zelf hebt geschreven: HTML van gebruikers, een advertentieplek, een preview van een gegenereerde pagina. Het lastige is weten welke tokens een bepaalde embed nodig heeft, want een ontbrekend token faalt meestal zonder melding. Het live frame hieronder voert echte tests uit, zodat u elke fout ziet in plaats van te gokken. Voor de basis van insluiten begint u met onze gids over HTML-iframes en video.
Vink tokens aan in de lijst. Het frame rechts herlaadt met precies die sandbox-waarde, die erboven als kopieerbare code staat.
Met allow-scripts uit toont het frame alleen zijn reserveregel, omdat niets erin kan draaien.
Zet allow-scripts aan en het frame meldt zijn eigen origin en biedt knoppen om een formulier te versturen, een pop-up te openen en een melding te tonen.
Elke knop meldt of de browser het toestond. Voeg het bijbehorende token toe en druk er opnieuw op om te vergelijken.
Begin met een lege sandbox en voeg tokens één voor één toe tot de embed werkt. Ze uit een lange lijst verwijderen is lastiger te doorgronden.
Combineer allow-scripts en allow-same-origin nooit voor inhoud die vanaf uw eigen origin wordt geserveerd. De ingesloten pagina kan dan zijn eigen sandbox verwijderen.
Gebruik bij voorkeur srcdoc of een apart subdomein voor HTML die gebruikers schrijven, zodat zelfs een fout in de tokens de cookies van uw hoofdsite niet kan bereiken.
Sandboxing beperkt camera, microfoon of vergelijkbare functies niet uit zichzelf. Gebruik daarnaast het allow-attribuut voor het permissions policy.
Als links in het frame gewone tabbladen moeten openen, voeg dan allow-popups-to-escape-sandbox toe, anders erft het nieuwe tabblad dezelfde beperkingen.
Veelgestelde vragen
Wat doet een leeg sandbox-attribuut?
Het past alle beperkingen tegelijk toe. Het ingesloten document kan geen scripts draaien, geen formulieren versturen, geen pop-ups of modals openen, het bovenste venster niet laten navigeren, de aanwijzer of oriëntatie niet vergrendelen, geen downloads starten, en het wordt behandeld alsof het van een unieke origin komt die nooit met iemand overeenkomt.
Waarom is allow-scripts met allow-same-origin gevaarlijk?
Als het ingesloten document op dezelfde origin staat als uw pagina, laten die twee tokens samen zijn script omhoog reiken en het sandbox-attribuut verwijderen, zodat het uiteindelijk niet veiliger is dan een gewoon iframe. De combinatie is prima voor inhoud van een echt andere origin, die uw pagina toch niet kan aanraken.
Mijn formulier in een sandbox doet niets als ik op verzenden druk. Waarom?
Zonder allow-forms wordt het formulier nog steeds weergegeven, maar verzenden activeert geen validatie en stuurt geen gegevens naar een server. Voeg allow-forms toe. Als het formulier ook afhankelijk is van cookies of opslag van zijn eigen site, heeft het ook allow-same-origin nodig.
Kan een iframe in een sandbox mijn hele pagina doorsturen?
Niet tenzij u allow-top-navigation toevoegt, of allow-top-navigation-by-user-activation, dat het alleen toestaat nadat iemand in het frame klikt. Als u beide weglaat, kan een embed uw pagina niet vervangen door een andere site.
Is sandbox genoeg om onbetrouwbare HTML veilig te tonen?
Het is de belangrijkste laag, niet de enige. Serveer onbetrouwbare inhoud vanaf een aparte origin of via srcdoc, houd allow-same-origin uit als scripts aanstaan, en voeg een Content-Security-Policy toe aan het ingesloten document als u bepaalt hoe het wordt geserveerd.
Hoe de ondoorzichtige origin alles verandert
Zonder allow-same-origin krijgt het ingesloten document een speciale origin die altijd faalt voor het same-origin policy. Zijn self.origin leest als de string "null".
Die ene regel schakelt veel uit, omdat de ingesloten pagina niet langer als deel van zijn eigen site telt. Widgets die afhangen van hun eigen cookies of opgeslagen status gaan hier vaak stuk, en daarom vragen zoveel ervan om allow-same-origin.
Stille fouten zijn de norm
Een geblokkeerde pop-up gooit geen fout; window.open geeft gewoon null terug. Een geblokkeerde melding keert meteen terug zonder iets te tonen. Een geblokkeerd formulier blijft gewoon staan. Als een embed zich vreemd gedraagt, kijk dan in de browserconsole van het frame voordat u de code van de embed zelf de schuld geeft.
Daarom meldt de demo op deze pagina de resultaten binnen het frame: u ziet hetzelfde stille gedrag waar een echte embed tegenaan zou lopen.
sandbox, allow en CSP doen verschillende dingen
sandbox beperkt wat het ingesloten document mag doen. Het allow-attribuut stelt een permissions policy in voor functies zoals camera, volledig scherm of geolocatie. Content-Security-Policy, verstuurd door de server van de ingesloten pagina, beperkt welke scripts en bronnen die laadt.
Een zorgvuldige embed van onbetrouwbare inhoud gebruikt alle drie, en het frame-ancestors-deel van CSP beantwoordt de omgekeerde vraag: wie een pagina überhaupt in een frame mag plaatsen.
Alle sandbox-tokens
Tokens worden gescheiden door spaties en zijn niet hoofdlettergevoelig. Alles wat niet in de lijst staat, blijft geblokkeerd.
Sandbox-tokens en wat elk ervan toestaat
Token
Staat toe
Scripts draaien, maar geen pop-upvensters openen
De echte origin van het document behouden in plaats van een ondoorzichtige
Formulieren versturen (anders worden ze getoond maar versturen ze niets)
alert(), confirm(), print() en prompt() gebruiken
Vensters openen met window.open() of target="_blank"
Die nieuwe vensters zonder de sandbox laten openen
Bestanden downloaden via links of navigatie
De pagina op het hoogste niveau laten navigeren
De pagina op het hoogste niveau laten navigeren, alleen na een klik
Niet-http-protocollen openen, zoals mailto:
De Pointer Lock API gebruiken
De schermoriëntatie vergrendelen
Een presentatiesessie starten
Niet-gepartitioneerde cookies aanvragen via de Storage Access API
Kopieerbare patronen
HTML van gebruikers tonen met scripts uit
De knop in het frame heeft een onclick-handler, maar met een lege sandbox draait die nooit.
Widget van derden op een andere origin
De widget draait zijn eigen script en verstuurt zijn formulier, en links kunnen echte tabbladen openen. Hij kan uw pagina niet doorsturen.
Dezelfde beperkingen als response-header verstuurd
Een server kan zijn eigen pagina sandboxen met CSP, wat ook geldt als de pagina direct wordt geopend in plaats van in een frame.
Schakel tokens om en test het frame
Het frame hieronder is een srcdoc-document. allow-same-origin wordt hier niet aangeboden, omdat een srcdoc-frame dan de origin van deze pagina zou delen, precies de combinatie waar de tips voor waarschuwen.
Scripts zijn geblokkeerd, dus niets in dit frame kan draaien.
Tokens
Huidig attribuut
Scripts draaien, maar geen pop-upvensters openen
De echte origin van het document behouden in plaats van een ondoorzichtige
Formulieren versturen (anders worden ze getoond maar versturen ze niets)
alert(), confirm(), print() en prompt() gebruiken
Vensters openen met window.open() of target="_blank"
Die nieuwe vensters zonder de sandbox laten openen
Bestanden downloaden via links of navigatie
De pagina op het hoogste niveau laten navigeren
De pagina op het hoogste niveau laten navigeren, alleen na een klik
Niet-http-protocollen openen, zoals mailto:
De Pointer Lock API gebruiken
De schermoriëntatie vergrendelen
Een presentatiesessie starten
Niet-gepartitioneerde cookies aanvragen via de Storage Access API
Sandbox-testframe
Scripts zijn uitgevoerd. De origin van dit frame is: {v}
Formulier versturen
Pop-up openen
Melding tonen
Formulier verstuurd.
Formulier is niet verstuurd.
Pop-up geopend (en weer gesloten).
Pop-up geblokkeerd: window.open gaf null terug.
Melding is getoond.
Melding geblokkeerd: die keerde meteen terug zonder iets te tonen.