Blog di ClockTools

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 , sviluppatore ed editore | | Recensito sotto il ClockTools politica editoriale

Illustrazione in evidenza iframe sandbox per ClockTools
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 riservataCosa impedisce la linea di base restrittivaPerché un'anteprima potrebbe interessarti
Esecuzione dello scriptJavaScript non viene eseguitoLe anteprime statiche HTML/CSS potrebbero non averne bisogno
Invio del moduloI moduli non possono essere inviatiGli esempi interattivi potrebbero richiedere una convalida senza una reale presentazione
Popup e nuovi contestiLe nuove finestre e schede sono limitateImpedisce a un esempio di generare liberamente pagine
Navigazione di primo livelloIl frame non può sostituire liberamente la pagina hostImpedisce all'anteprima di uscire dall'editor
Trattamento dell'origineAl contenuto può essere assegnata un'origine opaca univocaSepara lo storage e l'accesso dalla stessa origine dall'host
DownloadI download vengono bloccati senza la relativa autorizzazioneImpedisce a un esempio di avviare file per impostazione predefinita
ModaliAvviso, conferma e richiesta sono bloccatiAlcuni 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.

GettoneCapacità ripristinataDomanda da porre prima di aggiungerlo
consenti-scriptJavaScript esecuzioneQuesta anteprima ha davvero bisogno di un comportamento?
moduli consentitiInvio del moduloL'esempio può inviare dati a una destinazione esterna?
consentire-modaliavviso, confermare, e tempestivoUn dialogo può intrappolare o interrompere ripetutamente l'utente?
consentire-popupCreazione di contesti di navigazione popupUna nuova finestra fa parte dell'esercizio previsto?
consentire-downloadScarica l'iniziazioneIl codice utente dovrebbe creare file locali?
consentire la stessa origineConservazione dell'origine normale della risorsaL'origine potrebbe condividere privilegi o spazio di archiviazione con l'host?
consentire la navigazione in alto per attivazione dell'utenteNavigazione di primo livello avviata dall'utenteL'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.

Diagramma delle capacità che mostra un iframe sandbox con script, moduli e modali ripristinati selettivamente mentre l'accesso alla stessa origine rimane limitato
Diagramma delle capacità che mostra un iframe sandbox con script, moduli e modali ripristinati selettivamente mentre l'accesso alla stessa origine rimane limitato

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.

ControllaStato live osservatoSignificato
Sorgente di anteprimasrcdoc documento presenteL'attuale HTML è incorporato direttamente nel frame
Attributo sandboxconsenti-script consenti-moduli consenti-modaliVengono ripristinate tre funzionalità
Token della stessa origineAssenteL'anteprima mantiene un'origine opaca
Etichetta dell'interfaccia“sabbia opaca”Il confine viene reso noto all'utente
Pannelli di supportoConsole e controlli visibiliSono 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 lettorePunto di partenza minimoTestare prima del rilascio
Rendering statico HTML e CSSSabbiera vuotaScript, moduli, popup e navigazione superiore rimangono bloccati
Insegna lo scripting DOMAggiungi consenti-scriptLe esecuzioni degli script, il DOM dell'host e lo spazio di archiviazione rimangono isolati
Dimostrare la convalida del modulo nativoConsidera moduli consentiti solo se è richiesta la presentazioneLe destinazioni impreviste non possono ricevere dati sensibili
Dimostrare i dialoghiAggiungi consentire-modali temporaneamenteLe finestre di dialogo ripetute non possono rendere l'host inutilizzabile
Carica progetti controllati dall'utenteOrigine separata più controlli a più livelliSandbox, 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.

Informazioni sull'autore

Vigneshwaran Vijayakumar

Fondatore, sviluppatore ed editore di ClockTools | Responsabile marketing digitale | India

Vigneshwaran è un ingegnere con decenni di esperienza tecnica, compreso il lavoro professionale come responsabile del marketing digitale a Dubai. Il suo lavoro collega analisi dei dati, ottimizzazione dei motori di ricerca, ottimizzazione del tasso di conversione, sistemi di contenuti, produzione visiva, intelligenza artificiale applicata e apprendimento automatico. Presso ClockTools, trasforma quell'esperienza multidisciplinare in utilità browser mirate e guide pratiche e consapevoli del codice sorgente.

Profilo LinkedIn