Entwicklertools
Was ist ein Sandbox-Iframe?
Eine funktionsspezifische Anleitung zu Iframe-Sandboxing, undurchsichtigen Ursprüngen, Token-Interaktionen und einem sichereren HTML-Vorschaudesign.
Von Vigneshwaran Vijayakumar, Entwickler und Herausgeber | | Bewertet unter der ClockTools redaktionelle Richtlinie
Inhaltsverzeichnis
Ein Sandbox-Iframe ist ein eingebettetes Browserdokument mit zusätzlichen Einschränkungen, die von den Iframes angewendet werden Sandkasten Attribut. Mit einem leeren Sandkasten Wert, der Browser startet von einer restriktiven Grundlinie; individuell erlauben-* Token geben nur die Funktionen zurück, die der eingebettete Inhalt benötigt. Für eine HTML-Vorschau ist das sicherste nützliche Design nicht „dem Code vertrauen“. Es geht darum, „der Vorschau eine separate Grenze zu geben, die Mindestberechtigungen hinzuzufügen und Geheimnisse aus dem Experiment herauszuhalten.“
Was ändert sich, wenn ein Iframe in einer Sandbox gespeichert wird?
Ein gewöhnlicher Iframe erstellt einen verschachtelten Browserkontext. Same-Origin-Richtlinie, Berechtigungsrichtlinie, Inhaltssicherheitsrichtlinie und die eigenen Header der Frame-Site sind weiterhin wichtig, aber dem Frame werden nicht automatisch alle Browserfunktionen entzogen.
Hinzufügen Sandkasten fordert den Browser auf, eine zusätzliche Reihe von Einschränkungen aufzuerlegen. Die WHATWG HTML Standard definiert das Attribut als einen ungeordneten, durch Leerzeichen getrennten Satz von Token. Wenn kein Token vorhanden ist, bleibt die entsprechende Sandbox-Einschränkung bestehen. Durch das Hinzufügen eines Tokens wird eine bestimmte Einschränkung aufgehoben.
Diese Richtung kann leicht falsch verstanden werden:
```html
<iframe sandbox srcdoc="<p>Statische Vorschau</p>"></iframe>
```
Dies ist die restriktive Form. Es bedeutet nicht „keine Sandbox-Optionen ausgewählt“. Dies bedeutet, dass die Sandbox aktiv ist und keine ihrer optionalen Funktionen wiederhergestellt wurde.
```html
<iframe
sandbox="allow-scriptsallow-forms"
srcdoc="<button type='button'>Ausführen</button>">
</iframe>
```
Diese Version erlaubt Skripte und Formularverhalten, während andere Einschränkungen bestehen bleiben. Das genaue Sicherheitsergebnis hängt immer noch davon ab, woher der Inhalt kommt und was die umgebende Anwendung offenlegt.
Welche Einschränkungen gelten standardmäßig?
Der vollständige Standard enthält mehr Details als eine Checkliste, aber diese Kategorien erklären die meisten Vorschauverhalten.
| Sperrgebiet | Was die restriktive Grundlinie verhindert | Warum eine Vorschau wichtig sein könnte |
|---|---|---|
| Skriptausführung | JavaScript wird nicht ausgeführt | Für statische HTML/CSS-Vorschauen ist dies möglicherweise nicht erforderlich |
| Formulareinreichung | Formulare können nicht gesendet werden | Interaktive Beispiele müssen möglicherweise ohne echte Einreichung validiert werden |
| Popups und neue Kontexte | Neue Fenster und Registerkarten sind eingeschränkt | Verhindert, dass ein Beispiel Seiten frei erzeugt |
| Navigation auf oberster Ebene | Der Frame kann die Hostseite nicht frei ersetzen | Verhindert, dass eine Vorschau den Editor stört |
| Ursprungsbehandlung | Inhalten kann ein eindeutiger undurchsichtiger Ursprung zugewiesen werden | Trennt Speicher und Same-Origin-Zugriff vom Host |
| Downloads | Downloads werden ohne entsprechende Erlaubnis blockiert | Verhindert standardmäßig, dass ein Beispiel Dateien initiiert |
| Modalitäten | Warnung, Bestätigung und Aufforderung sind blockiert | Einige Lehrbeispiele verwenden Dialoge, die den Benutzer jedoch unterbrechen |
Die MDN-Iframe-Referenz listet die aktuellen Token auf und erklärt, was jedes einzelne wiederherstellt. Überprüfen Sie diese Referenz, anstatt eine alte Tokenliste in eine langlebige Sicherheitskontrolle zu kopieren.
Was ermöglichen die allgemeinen Wiederherstellungstokens?
Betrachten Sie jeden Token als eine Fähigkeitsentscheidung und nicht als einen Komfortschalter.
| Token | Fähigkeit wiederhergestellt | Frage, die Sie stellen sollten, bevor Sie sie hinzufügen |
|---|---|---|
Allow-Skripte | JavaScript Ausführung | Benötigt diese Vorschau wirklich Verhalten? |
Formulare zulassen | Formulareinreichung | Kann das Beispiel Daten an ein externes Ziel senden? |
Zulassungsmodalitäten | Alarm, bestätigen, und Aufforderung | Kann ein Dialog den Benutzer abfangen oder wiederholt unterbrechen? |
Popups zulassen | Erstellung von Popup-Browsing-Kontexten | Ist ein neues Fenster Teil der beabsichtigten Übung? |
Downloads zulassen | Download-Einleitung | Sollte Benutzercode lokale Dateien erstellen? |
gleichen Ursprung zulassen | Beibehaltung des normalen Ursprungs der Ressource | Könnte dieser Ursprung Berechtigungen oder Speicher mit dem Host teilen? |
Top-Navigation durch Benutzeraktivierung zulassen | Vom Benutzer initiierte Navigation auf oberster Ebene | Ist das Verlassen des Editors eine explizite Benutzeraktion? |
Einige Token interagieren. Es ist notwendig, sie einzeln zu überprüfen, aber nicht ausreichend. Der Ursprung des gerahmten Dokuments, ggf srcdoc oder eine Remote-URL, die Inhaltssicherheitsrichtlinie des Hosts und jede Nachrichtenbrücke zwischen Frame und übergeordnetem Frame wirken sich alle auf die Grenze aus.
Das Diagramm beschreibt eine Berechtigungsgrenze. Es wird nicht behauptet, dass ein Tokensatz beliebigen Code unschädlich macht.
Warum ist ein undurchsichtiger Ursprung wichtig?
Ohne gleichen Ursprung zulassenSandbox-Inhalte werden so behandelt, als kämen sie von einem speziellen Ursprung, der die normalen Prüfungen auf denselben Ursprung nicht besteht. Entwickler nennen dies oft einen undurchsichtigen oder einzigartigen Ursprung.
Für eine Inline srcdoc Vorschau, diese Trennung ist wertvoll. Die Vorschau kann ein Dokument rendern, ohne dass es als derselbe Anwendungsursprung wie die Editorseite behandelt wird. Es kann nicht einfach auf das übergeordnete DOM zugreifen oder den Speicher desselben Ursprungs lesen, als wäre es eine weitere Komponente des Hosts.
Undurchsichtiger Ursprung bedeutet nicht „offline“ oder „Netzwerk deaktiviert“. Wenn Skripte zulässig sind, kann der Vorschaucode weiterhin Netzwerkanfragen stellen, die die Browserrichtlinien und das Ziel zulassen. Es kann CPU und Speicher nutzen, sein eigenes DOM manipulieren und über Kanäle kommunizieren, die der Host bewusst offenlegt. Die Grenze reduziert die Autorität; Der Code wird dadurch nicht zertifiziert.
MDN warnt insbesondere vor Kombinationen Allow-Skripte und gleichen Ursprung zulassen wenn der eingebettete Inhalt denselben Ursprung hat und sein eigenes Sandbox-Attribut entfernen kann. Die wichtige Lektion ist kontextabhängig: Stellen Sie nicht beide Funktionen wieder her, nur weil ein Beispiel ohne sie fehlschlägt.
Wie konfiguriert die ClockTools-Vorschau ihre Sandbox?
Das Leben ClockTools Echtzeit-Editor HTML Erstellt die Vorschau mit srcdoc. Wenn JavaScript aktiviert ist, lautet der Iframe-Sandbox-Wert:
Erlaube-Skripte, Erlaube-Formulare, Erlaube-Modale
Die Implementierung verzichtet bewusst darauf gleichen Ursprung zulassen, Popups zulassen, Top-Navigationsberechtigungen und Download-Berechtigungen. Die Benutzeroberfläche kennzeichnet die Vorschau als Undurchsichtiger SandkastenDadurch wird die Ursprungsentscheidung sichtbar gemacht, anstatt sie im Quellcode zu verbergen.
Diese Konfiguration unterstützt gängige Lehrbeispiele: Skripte können die Vorschau aktualisieren, Formulare können Browservalidierung und Übermittlungsverhalten ausüben und modale Beispiele können ausgeführt werden. Es wandelt unbekannten Code nicht in vertrauenswürdigen Code um. Die eigene Anleitung des Herausgebers fordert Benutzer daher auf, Geheimnisse zu vermeiden und unbekannte Skripte zu überprüfen.
Die Seite erfasst auch Konsolenmeldungen und stellt ein Fenster zur Dokumentenprüfung bereit. Dabei handelt es sich um Beobachtbarkeitsfunktionen, nicht um Sandbox-Berechtigungen. Ein Konsolenfenster hilft bei der Erklärung eines Fehlers. es verhindert nicht eine Anfrage. Eine strukturelle Prüfung kann ein fehlendes Etikett aufdecken; Es wird keine vollständige Sicherheitsüberprüfung durchgeführt.
Was hat ein Fähigkeitscheck ergeben?
Ich habe das gerenderte Vorschauelement im Live-Arbeitsbereich ClockTools überprüft, anstatt mich nur auf Marketingtext zu verlassen.
| Überprüfen | Beobachteter Live-Zustand | Bedeutung |
|---|---|---|
| Vorschau der Quelle | srcdoc Dokument vorhanden | Der aktuelle HTML wird direkt in den Frame eingebettet |
| Sandbox-Attribut | Erlaube-Skripte, Erlaube-Formulare, Erlaube-Modale | Drei Funktionen werden wiederhergestellt |
| Token mit gleichem Ursprung | Abwesend | Die Vorschau behält einen undurchsichtigen Ursprung |
| Schnittstellenetikett | „undurchsichtiger Sandkasten“ | Die Grenze wird dem Benutzer mitgeteilt |
| Stützplatten | Konsole und Prüfungen sichtbar | Laufzeit- und Dokument-Feedback sind verfügbar |
Der Iframe-Titel lautete „Live HTML-Vorschau“, was der unterstützenden Technologie auch eine Zweckbezeichnung für das eingebettete Dokument verleiht.
Diese Inspektion bestätigt die konfigurierte Grenze zu diesem Zeitpunkt. Es beweist nicht, dass jedes mögliche Skript sicher ist, und es ersetzt nicht eine Überprüfung der Nachrichtenbrücke, der Handhabung externer Ressourcen, der Inhaltssicherheitsrichtlinie oder zukünftiger Codeänderungen.
Welche Token-Kombinationen verdienen besondere Vorsicht?
Verwenden Sie eine bedrohungsbasierte Überprüfung anstelle eines universellen Token-Rezepts.
Allow-Skripte plus gleichen Ursprung zulassen
Dieses Paar kann die Isolierung erheblich schwächen, wenn das eingebettete Dokument denselben Ursprung hat, und seine Einbettungsbedingungen beeinflussen. Wenn beides erforderlich ist, stellen Sie nicht vertrauenswürdige Inhalte von einem bewusst separaten Ursprung bereit und analysieren Sie die Fluchtwege, anstatt das Attribut als einzige Grenze zu betrachten.
Formulare plus Netzwerkzugriff
Formulare zulassen stellt die Übermittlung wieder her, aber Skripte und gewöhnliche HTML-Elemente können Anfragen auch auf andere Weise senden. Geben Sie niemals Zugangsdaten, private Kundendaten oder Inhabertokens in eine nicht vertrauenswürdige Vorschau ein und gehen Sie davon aus, dass die Sandbox sie enthält.
Popups plus Escape-Verhalten
Popups zulassen Lässt einen Frame einen neuen Browserkontext öffnen. Erlaube-Popups-zu-Escape-Sandbox Lässt den neuen Kontext geerbte Sandbox-Flags vermeiden. Das kann bei einer bewusst isolierten Anzeige oder einem externen Link sinnvoll sein, erweitert aber die Bewertungsoberfläche.
Top-Navigation
Top-Navigationsberechtigungen ermöglichen es dem Frame, unter definierten Bedingungen die Hostseite zu ersetzen. Ein Code-Spielplatz braucht das selten. Wenn die Navigation Teil der Lektion ist, sollten Sie erwägen, das Ziel abzufangen und anzuzeigen, anstatt die Vorschausteuerung für die Seite der obersten Ebene zu gewähren.
Was kann eine Sandbox nicht schützen?
Eine Sandbox ist ein Browsermechanismus und keine vollständige Plattform für feindlichen Code.
- Es hindert einen Benutzer nicht daran, denselben Inhalt direkt außerhalb des Frames zu öffnen.
- Es ist keine Garantie dafür, dass zulässige Skripte schnell, höflich oder frei von Endlosschleifen sind.
- Es blockiert nicht automatisch jede Netzwerkanfrage.
- Es bereinigt weder HTML noch beweist es, dass eine URL sicher ist.
- Bereits in der Vorschau platzierte Geheimnisse werden nicht gesichert.
- Es ersetzt nicht die serverseitige Validierung für echte Formulare.
- Zugänglichkeit, Semantik oder browserübergreifendes Verhalten werden nicht überprüft.
- Es schützt keinen anderen Dienst, der eine Anfrage aus der Vorschau akzeptiert.
Die Grenze ändert sich auch im Laufe der Zeit, da sich Browser und Standards weiterentwickeln. Das Funktionsverhalten sollte in den Browsern getestet werden, die die Zielgruppe tatsächlich verwendet, und die Token-Liste sollte anhand der aktuellen Spezifikationen überprüft werden.
Wie sollte man eine Browsercode-Vorschau gestalten?
Beginnen Sie mit dem Leeren Sandkasten Attribut hinzufügen und dann jeweils eine Funktion hinzufügen. Erstellen Sie für jede Ergänzung einen kleinen Akzeptanztest und einen entsprechenden Missbrauchstest.
| Leserjob | Minimaler Ausgangspunkt | Testen Sie vor der Veröffentlichung |
|---|---|---|
| Rendern Sie statisch HTML und CSS | Sandkasten leeren | Skripte, Formulare, Popups und die obere Navigation bleiben blockiert |
| Bringen Sie DOM-Scripting bei | Hinzufügen Allow-Skripte | Skriptausführungen, Host-DOM und Speicher bleiben isoliert |
| Demonstrieren Sie die native Formularvalidierung | Überlegen Sie Formulare zulassen nur wenn eine Vorlage erforderlich ist | Unerwartete Ziele können keine sensiblen Daten empfangen |
| Dialoge demonstrieren | Hinzufügen Zulassungsmodalitäten vorübergehend | Wiederholte Dialoge können den Host nicht unbrauchbar machen |
| Laden Sie benutzergesteuerte Projekte | Separater Ursprung plus mehrschichtige Steuerelemente | Sandbox, CSP, Messaging, Ressourcen und Grenzwerte werden gemeinsam überprüft |
Halten Sie das Nachrichtenprotokoll des übergeordneten Frames eng. Überprüfen Sie den Absender, die Nachrichtenform und die zulässigen Befehle. Akzeptieren Sie keinen willkürlichen Code oder Navigationsanweisungen über eine allgemeine „Ausführen“-Nachricht, es sei denn, es handelt sich dabei um das explizit isolierte Produkt, das Sie erstellen möchten.
Bieten Sie einen JavaScript-Aus-Modus für die statische Inspektion an. Fügen Sie Steuerelemente zum Stoppen, Zurücksetzen oder Neuladen für außer Kontrolle geratene Beispiele hinzu. Oberflächenkonsolenfehler ohne Spiegelung vertraulicher übergeordneter Daten in den Frame. Behandeln Sie externe Stylesheets und Skripte als Netzwerkabhängigkeiten, deren Hosts und zukünftige Inhalte außerhalb der Kontrolle des Herausgebers liegen.
Für ein gezieltes Experiment ist die Echtzeit-HTML-Editor macht reaktionsfähige Breiten, Konsolenerfassung, Prüfungen und seinen undurchsichtigen Sandbox-Status verfügbar. Für Release-Arbeiten, die Pakete, Server, Anmeldeinformationen, Tests oder Bereitstellungen betreffen, verschieben Sie den Code in ein lokales Repository und verwenden Sie einen umfassenderen Entwicklungs- und Sicherheitsüberprüfungs-Workflow.
Häufig gestellte Fragen
Was bewirkt das Iframe-Sandbox-Attribut?
Es wendet zusätzliche Einschränkungen auf das gerahmte Dokument an. Ein leerer Sandbox-Wert beginnt bei der restriktiven Grundlinie, während durch Leerzeichen getrennte Zulassungstoken ausgewählte Funktionen wie Skripte oder Formulare wiederherstellen.
Bedeutet Sandboxed, dass der Iframe völlig sicher ist?
Nein. Sandboxing reduziert die Autorität, garantiert jedoch nicht, dass der Code vertrauenswürdig ist, jede Netzwerkanfrage blockiert, die Erschöpfung von Ressourcen verhindert, HTML bereinigt oder in der Vorschau platzierte Geheimnisse schützt.
Was ist ein undurchsichtiger Ursprung in einem Sandbox-Iframe?
Wenn „allow-same-origin“ nicht vorhanden ist, wird das gerahmte Dokument so behandelt, als hätte es einen speziellen Ursprung, der die normalen Same-Origin-Prüfungen nicht besteht. Dadurch wird verhindert, dass es als derselbe Anwendungsursprung fungiert wie das übergeordnete Element.
Warum sind Allow-Skripte mit Allow-Same-Origin riskant?
Bei Inhalten gleichen Ursprungs kann die Wiederherstellung beider Funktionen die Isolation, die die Sandbox bieten sollte, untergraben, einschließlich Szenarien, in denen gerahmter Code die Sandbox entfernen kann. Verwenden Sie einen separaten Ursprung und eine vollständige Bedrohungsüberprüfung, wenn beides erforderlich ist.
Kann ein Sandbox-Iframe Netzwerkanfragen stellen?
Möglicherweise ja. Sandboxing fungiert nicht als universelle Netzwerk-Firewall. Zulässige Skripte und HTML-Ressourcen können weiterhin Anfragen stellen, die die Browserrichtlinie und das Ziel zulassen.
Sollte ein HTML-Spielplatz JavaScript zulassen?
Nur wenn der Leserauftrag es benötigt. Ein statischer HTML/CSS-Viewer kann Skripte blockieren. Ein interaktiver Spielplatz kann Zulassungsskripte hinzufügen und gleichzeitig eine undurchsichtige Ursprungs- und Schichtressourcen-, Nachrichten-, Zurücksetzungs- und Geheimverwaltungssteuerung beibehalten.

