Strumenti per sviluppatori
Che cos'è un iframe sandbox?
Una guida funzionalità per funzionalità al sandboxing iframe, origini opache, interazioni token e progettazione di anteprima HTML più sicura.
Di Vigneshwaran Vijayakumar, sviluppatore ed editore | | Recensito sotto il ClockTools politica editoriale
Sommario
Un iframe sandbox è un documento del browser incorporato con restrizioni aggiuntive applicate dagli iframe sabbiera attributo. Con un vuoto sabbiera valore, il browser inizia da una linea di base restrittiva; individuo consenti-* i token restituiscono solo le funzionalità necessarie al contenuto incorporato. Per un'anteprima HTML, il design utile più sicuro non è "fidarsi del codice". Si tratta di "dare all'anteprima un confine separato, aggiungere le autorizzazioni minime e mantenere i segreti fuori dall'esperimento".
Cosa cambia quando un iframe è in modalità sandbox?
Un iframe ordinario crea un contesto di navigazione nidificato. La politica della stessa origine, la politica delle autorizzazioni, la politica di sicurezza dei contenuti e le intestazioni del sito con frame continuano ad avere importanza, ma il frame non viene automaticamente privato di ogni funzionalità del browser.
Aggiunta sabbiera chiede al browser di imporre una serie aggiuntiva di restrizioni. Il COSA WG HTML Standard definisce l'attributo come un insieme di token non ordinato e separato da spazi. L'assenza di un token mantiene in vigore la corrispondente restrizione sandbox; l'aggiunta di un token elimina una particolare restrizione.
Questa direzione è facile da fraintendere:
```html
<iframe sandbox srcdoc="<p>Anteprima statica</p>"></iframe>
```
Questa è la forma restrittiva. Ciò non significa “nessuna opzione sandbox selezionata”. Significa che la sandbox è attiva e nessuna delle sue funzionalità opzionali è stata ripristinata.
```html
<iframe
sandbox="allow-scripts-allow-forms"
srcdoc="<button type='button'>Esegui</button>">
</iframe>
```
Questa versione consente script e comportamenti dei moduli lasciando in atto altre restrizioni. L'esatto risultato in termini di sicurezza dipende ancora dalla provenienza del contenuto e da cosa espone l'applicazione circostante.
Quali restrizioni si applicano per impostazione predefinita?
Lo standard completo contiene più dettagli di un elenco di controllo, ma queste categorie spiegano la maggior parte del comportamento dell'anteprima.
| Zona riservata | Cosa impedisce la linea di base restrittiva | Perché un'anteprima potrebbe interessarti |
|---|---|---|
| Esecuzione dello script | JavaScript non viene eseguito | Le anteprime statiche HTML/CSS potrebbero non averne bisogno |
| Invio del modulo | I moduli non possono essere inviati | Gli esempi interattivi potrebbero richiedere una convalida senza una reale presentazione |
| Popup e nuovi contesti | Le nuove finestre e schede sono limitate | Impedisce a un esempio di generare liberamente pagine |
| Navigazione di primo livello | Il frame non può sostituire liberamente la pagina host | Impedisce all'anteprima di uscire dall'editor |
| Trattamento dell'origine | Al contenuto può essere assegnata un'origine opaca univoca | Separa lo storage e l'accesso dalla stessa origine dall'host |
| Download | I download vengono bloccati senza la relativa autorizzazione | Impedisce a un esempio di avviare file per impostazione predefinita |
| Modali | Avviso, conferma e richiesta sono bloccati | Alcuni esempi didattici utilizzano dialoghi, ma interrompono l'utente |
Il Riferimento iframe MDN elenca i token correnti e spiega cosa ripristina ciascuno. Controlla quel riferimento invece di copiare un vecchio elenco di token in un controllo di sicurezza di lunga durata.
Cosa ripristinano i token di autorizzazione comuni?
Pensa a ciascun token come a una decisione in termini di capacità, non a un interruttore di convenienza.
| Gettone | Capacità ripristinata | Domanda da porre prima di aggiungerlo |
|---|---|---|
consenti-script | JavaScript esecuzione | Questa anteprima ha davvero bisogno di un comportamento? |
moduli consentiti | Invio del modulo | L'esempio può inviare dati a una destinazione esterna? |
consentire-modali | avviso, confermare, e tempestivo | Un dialogo può intrappolare o interrompere ripetutamente l'utente? |
consentire-popup | Creazione di contesti di navigazione popup | Una nuova finestra fa parte dell'esercizio previsto? |
consentire-download | Scarica l'iniziazione | Il codice utente dovrebbe creare file locali? |
consentire la stessa origine | Conservazione dell'origine normale della risorsa | L'origine potrebbe condividere privilegi o spazio di archiviazione con l'host? |
consentire la navigazione in alto per attivazione dell'utente | Navigazione di primo livello avviata dall'utente | L'uscita dall'editor è un'azione esplicita dell'utente? |
Alcuni token interagiscono. Rivederli uno alla volta è necessario ma non sufficiente. L'origine del documento incorniciato, se lo è srcdoc o un URL remoto, la politica di sicurezza dei contenuti dell'host e qualsiasi ponte di messaggio tra frame e elemento principale influiscono tutti sul confine.
Il diagramma descrive un limite di autorizzazione. Non afferma che qualsiasi set di token renda innocuo il codice arbitrario.
Perché è importante un’origine opaca?
Senza consentire la stessa origine, i contenuti sandbox vengono considerati come provenienti da un'origine speciale che non supera i normali controlli della stessa origine. Gli sviluppatori spesso la chiamano origine opaca o unica.
Per un in linea srcdoc anteprima, quella separazione è preziosa. L'anteprima può eseguire il rendering di un documento senza essere trattata come la stessa origine dell'applicazione della pagina dell'editor. Non può semplicemente raggiungere il DOM del genitore o leggere la memoria della stessa origine come se fosse un altro componente dell'host.
Origine opaca non significa "offline" o "rete disabilitata". Se gli script sono consentiti, il codice di anteprima potrebbe comunque effettuare richieste di rete consentite dai criteri del browser e dalla destinazione. Può utilizzare CPU e memoria, manipolare il proprio DOM e comunicare attraverso i canali che l'host espone deliberatamente. Il confine riduce l'autorità; non certifica il codice.
MDN mette in guardia in particolare dalla combinazione consenti-script e consentire la stessa origine quando il contenuto incorporato ha la stessa origine e può rimuovere il proprio attributo sandbox. La lezione importante è contestuale: non ripristinare entrambe le capacità semplicemente perché un esempio fallisce senza di esse.
In che modo l'anteprima ClockTools configura il suo sandbox?
Il vivo ClockTools editor HTML in tempo reale costruisce l'anteprima con srcdoc. Quando JavaScript è abilitato, il suo valore sandbox iframe è:
consenti-script consenti-moduli consenti-modali
L'implementazione omette intenzionalmente consentire la stessa origine, consentire-popup, autorizzazioni di navigazione in alto e autorizzazione di download. L'interfaccia etichetta l'anteprima come an sandbox opaco, rendendo visibile la decisione sull'origine anziché nasconderla nel codice sorgente.
Tale configurazione supporta esempi didattici comuni: gli script possono aggiornare l'anteprima, i moduli possono esercitare la convalida del browser e il comportamento di invio e possono essere eseguiti esempi modali. Non trasforma il codice sconosciuto in codice attendibile. La guida stessa dell'editor quindi dice agli utenti di evitare segreti e rivedere script non familiari.
La pagina acquisisce inoltre i messaggi della console ed espone un pannello di controllo dei documenti. Queste sono funzionalità di osservabilità, non autorizzazioni sandbox. Un pannello della console aiuta a spiegare un errore; non impedisce una richiesta. Un controllo strutturale può segnalare un'etichetta mancante; non conduce una revisione completa della sicurezza.
Cosa ha evidenziato un controllo di capacità?
Ho esaminato l'elemento di anteprima renderizzato nell'area di lavoro live ClockTools anziché fare affidamento solo sul testo di marketing.
| Controlla | Stato live osservato | Significato |
|---|---|---|
| Sorgente di anteprima | srcdoc documento presente | L'attuale HTML è incorporato direttamente nel frame |
| Attributo sandbox | consenti-script consenti-moduli consenti-modali | Vengono ripristinate tre funzionalità |
| Token della stessa origine | Assente | L'anteprima mantiene un'origine opaca |
| Etichetta dell'interfaccia | “sabbia opaca” | Il confine viene reso noto all'utente |
| Pannelli di supporto | Console e controlli visibili | Sono disponibili feedback sul runtime e sui documenti |
Il titolo dell'iframe era "Live HTML anteprima", che fornisce anche alla tecnologia assistiva un'etichetta di scopo per il documento incorporato.
Questa ispezione conferma il confine configurato in quel momento. Non dimostra che ogni possibile script sia sicuro e non sostituisce una revisione del bridge di messaggi, della gestione delle risorse esterne, della politica di sicurezza dei contenuti o di future modifiche al codice.
Quali combinazioni di token meritano maggiore cautela?
Utilizza una revisione basata sulle minacce invece di una ricetta token universale.
consenti-script inoltre consentire la stessa origine
Questa coppia può indebolire seriamente l'isolamento quando il documento incorporato ha la stessa origine e può influenzarne le condizioni di incorporamento. Se sono necessari entrambi, fornire contenuto non attendibile da un'origine deliberatamente separata e analizzare i percorsi di fuga anziché trattare l'attributo come unico confine.
Forms plus network access
moduli consentiti ripristina l'invio, ma gli script e gli elementi HTML ordinari possono anche inviare richieste in altri modi. Non inserire mai credenziali, dati privati dei clienti o token al portatore in un'anteprima non attendibile e dare per scontato che la sandbox li conterrà.
Popup e comportamento di fuga
consentire-popup consente a un frame di aprire un nuovo contesto di navigazione. consenti-popup-di-escape-sandbox consente al nuovo contesto di evitare i flag sandbox ereditati. Ciò può essere utile per una pubblicità volutamente isolata o un collegamento esterno, ma espande la superficie della recensione.
Navigazione in alto
Le autorizzazioni di navigazione in alto consentono al frame di sostituire la pagina host in condizioni definite. Un parco giochi di codice raramente ne ha bisogno. Se la navigazione fa parte della lezione, valuta la possibilità di intercettare e visualizzare la destinazione invece di garantire il controllo dell'anteprima sulla pagina di livello superiore.
Cosa non può proteggere una sandbox?
Una sandbox è un meccanismo del browser, non una piattaforma completa di codice ostile.
- Non impedisce a un utente di aprire lo stesso contenuto direttamente all'esterno del frame.
- Non garantisce che gli script consentiti siano veloci, educati o privi di cicli infiniti.
- Non blocca automaticamente ogni richiesta di rete.
- Non disinfetta HTML né dimostra che un URL sia sicuro.
- Non protegge i segreti già inseriti nell'anteprima.
- Non sostituisce la convalida lato server per i moduli reali.
- Non convalida l'accessibilità, la semantica o il comportamento tra browser.
- Non protegge un altro servizio che accetta una richiesta dall'anteprima.
Il confine cambia anche nel tempo man mano che i browser e gli standard si evolvono. Il comportamento delle funzionalità dovrebbe essere testato nei browser effettivamente utilizzati dal pubblico e l'elenco dei token dovrebbe essere rivisto rispetto alle specifiche attuali.
Come dovresti progettare un'anteprima del codice del browser?
Inizia dal vuoto sabbiera attributo, quindi aggiungi una funzionalità alla volta. Per ogni aggiunta, crea un piccolo test di accettazione e un corrispondente test di abuso.
| Lavoro di lettore | Punto di partenza minimo | Testare prima del rilascio |
|---|---|---|
| Rendering statico HTML e CSS | Sabbiera vuota | Script, moduli, popup e navigazione superiore rimangono bloccati |
| Insegna lo scripting DOM | Aggiungi consenti-script | Le esecuzioni degli script, il DOM dell'host e lo spazio di archiviazione rimangono isolati |
| Dimostrare la convalida del modulo nativo | Considera moduli consentiti solo se è richiesta la presentazione | Le destinazioni impreviste non possono ricevere dati sensibili |
| Dimostrare i dialoghi | Aggiungi consentire-modali temporaneamente | Le finestre di dialogo ripetute non possono rendere l'host inutilizzabile |
| Carica progetti controllati dall'utente | Origine separata più controlli a più livelli | Sandbox, CSP, messaggistica, risorse e limiti vengono esaminati insieme |
Mantenere stretto il protocollo del messaggio del frame principale. Convalida il mittente, la forma del messaggio e i comandi consentiti. Non accettare codice arbitrario o istruzioni di navigazione tramite un messaggio generico "esegui" a meno che non si tratti del prodotto esplicitamente isolato che intendi creare.
Offri una modalità JavaScript-off per l'ispezione statica. Aggiungi controlli di arresto, ripristino o ricarica per esempi in fuga. Errori della console di Surface senza eseguire il mirroring dei dati principali sensibili nel frame. Tratta i fogli di stile e gli script esterni come dipendenze di rete i cui host e contenuti futuri sono fuori dal controllo dell'editor.
Per un esperimento mirato, il editor HTML in tempo reale espone larghezze reattive, acquisizione della console, controlli e il suo stato sandbox opaco. Per il lavoro di rilascio che coinvolge pacchetti, server, credenziali, test o distribuzione, sposta il codice in un repository locale e utilizza un flusso di lavoro di sviluppo e revisione della sicurezza più completo.
Domande frequenti
Cosa fa l'attributo sandbox iframe?
Applica ulteriori restrizioni al documento incorniciato. Un valore sandbox vuoto inizia dalla linea di base restrittiva, mentre i token di autorizzazione separati da spazi ripristinano funzionalità selezionate come script o moduli.
Sandboxed significa che l'iframe è completamente sicuro?
No. Il sandboxing riduce l'autorità ma non garantisce che il codice sia affidabile, blocchi ogni richiesta di rete, prevenga l'esaurimento delle risorse, sanitizzi HTML o protegga i segreti inseriti nell'anteprima.
Cos'è un'origine opaca in un iframe sandbox?
Quando consenti la stessa origine è assente, il documento incorniciato viene considerato come avente un'origine speciale che non supera i normali controlli della stessa origine. Ciò aiuta a evitare che agisca come la stessa origine dell'applicazione del genitore.
Perché gli script consentiti con la stessa origine sono rischiosi?
Per i contenuti della stessa origine, il ripristino di entrambe le funzionalità può compromettere l'isolamento che la sandbox avrebbe dovuto fornire, inclusi scenari in cui il codice con frame può rimuovere la sandbox. Utilizzare un'origine separata e una revisione completa delle minacce quando sono necessarie entrambe.
Un iframe sandbox può effettuare richieste di rete?
Potenzialmente sì. Il sandboxing non funge da firewall di rete universale. Gli script consentiti e le risorse HTML possono comunque effettuare richieste consentite dai criteri del browser e dalla destinazione.
Un parco giochi HTML dovrebbe consentire JavaScript?
Solo quando il lavoro del lettore ne ha bisogno. Un visualizzatore statico HTML/CSS può mantenere gli script bloccati. Un parco giochi interattivo può aggiungere script di autorizzazione preservando un'origine opaca e stratificando risorse, messaggistica, ripristino e controlli di gestione dei segreti.

