Kategorien
Angular JavaScript Security

Frontent Sicherheit mit Sandboxing

Sandbox-Iframes bieten eine wichtige Sicherheitsschicht, wenn Sie Drittanbieterinhalte auf Ihrer Website einbetten möchten. Ohne die Sandbox können Iframes potenziell schädlichen Code enthalten und ausführen. Sie könnten bösartige Skripte ausführen, die Benutzerdaten stehlen, unerwünschte Werbung anzeigen oder andere schädliche Aktionen ausführen. Mit der Sandbox können Sie genau kontrollieren, was im Iframe erlaubt ist und was nicht.

Das sandbox Attribut für Iframes kann mit den folgenden Direktiven oder Werten gefüllt werden, um verschiedene Einschränkungen für den Inhalt des Iframes zu setzen:

Sandbox-AttributBeschreibungBeispiel
allow-formsErlaubt dem eingebetteten Dokument, Formulareinreichungen zu tätigen.document.forms[0].submit();
allow-modalsErlaubt dem eingebetteten Dokument, Modal-Dialoge zu öffnen (z. B. mit alert, confirm, prompt oder print).alert(„Hallo, Welt!“);
allow-orientation-lockErlaubt dem eingebetteten Dokument, den Bildschirm zu sperren mit der screen.orientation.lock(‚landscape‘);
allow-pointer-lockErlaubt dem eingebetteten Dokument, den Mauszeiger zu sperren und die Pointer Lock API zu verwenden.canvas.addEventListener("click", async () => {
await canvas.requestPointerLock();
});
allow-popupsErlaubt dem eingebetteten Dokument, Pop-up-Fenster oder -Tabs zu öffnen.window.open(„https://example.com“);
allow-popups-to-escape-sandboxErlaubt Pop-up-Fenstern, die vom eingebetteten Dokument geöffnet wurden, den Sandbox-Modus zu verlassen.Angenommen, Sie haben ein iFrame mit sandbox="allow-popups", aber ohne das allow-popups-to-escape-sandbox Attribut. Wenn dann das iFrame ein Popup mit window.open() öffnet, gelten dieselben Sandbox-Einschränkungen auch für dieses Popup-Fenster. Mit dem allow-popups-to-escape-sandbox Attribut wird das Popup-Fenster dagegen nicht von den Sandbox-Einschränkungen des iFrames beeinflusst.
allow-presentationErlaubt eingebetteten Dokumenten, die Presentation API zu verwenden.var request = new PresentationRequest([„https://example.com/presentation.html“]);
allow-same-originErlaubt dem eingebetteten Dokument, die gleiche Herkunft wie das einbettende Dokument zu behandeln. Ohne dieses Schlüsselwort sind sie von fremden Ursprungs und werden nicht erlaubt.var xhr = new XMLHttpRequest();
xhr.open(„GET“, „/api/data“, true);
xhr.send();
allow-scriptsErlaubt dem eingebetteten Dokument, Skripte auszuführen (aber nicht automatische Ausführungen von Pop-ups).document.getElementById(„foo“).innerHTML = „bar“;
allow-storage-access-by-user-activationErlaubt auf den lokalen Speicher zuzugreifen, wenn es durch Benutzeraktivierung gestartet wird.localStorage.setItem(„key“, „value“);
allow-top-navigationErlaubt dem eingebetteten Dokument, das einbettende Dokument zu navigieren.top.location.href = „https://example.com“;
allow-top-navigation-by-user-activationErlaubt dem eingebetteten Dokument, das einbettende Dokument zu navigieren, aber nur wenn dies durch Benutzeraktivierung geschieht.
<a href=“https://example.com“ target=“_top“>Besuchen Sie example.com</a>
Das Iframe sandbox Attribut

Ohne spezifische Direktiven blockiert ein gesandboxter Iframe alle diese Aktionen.

Beispiel für die Verwendung des sandbox Attributs mit mehreren Direktiven:

<iframe sandbox="allow-scripts allow-forms" src="https://example.com"></iframe>

In diesem Beispiel können innerhalb des Iframes Skripte ausgeführt und Formulare übermittelt werden. Alle anderen Aktionen, die durch die obigen Direktiven gesteuert werden, sind jedoch blockiert.

Sandboxing und Einbinden von Dirttanbieter JavaScript

Um Drittanbieter-JavaScript in einem Sandbox-Iframe zu nutzen, können Sie einen Ansatz wie den folgenden verwenden:

<iframe sandbox="allow-scripts" src="https://your-website.com/iframe-content.html"></iframe>

In diesem Beispiel wird ein Iframe erstellt, der das Ausführen von Skripten erlaubt (allow-scripts). Der Inhalt des Iframes wird von iframe-content.html geladen, das auf Ihrer eigenen Website gehostet ist.

Die iframe-content.html Datei könnte so aussehen:

<!DOCTYPE html>
<html>
<body>
    <script src="https://third-party.com/some-script.js"></script>
</body>
</html>

In diesem Fall wird das Drittanbieter-Skript innerhalb des Iframes geladen und ausgeführt. Es ist jedoch auf das Iframe beschränkt und kann nicht auf Elemente oder Daten außerhalb des Iframes zugreifen, es sei denn, Sie erweitern die Sandbox-Erlaubnisse mit zusätzlichen Direktiven.