Get to know MDN better
Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Die setHTML()-Methode der ShadowRoot-Schnittstelle bietet eine XSS-sichere Methode, einen HTML-String zu parsen und zu bereinigen, der dann den vorhandenen Baum im Shadow DOM ersetzt.
Die Methode entfernt alle Elemente und Attribute, die als XSS-unsicher gelten, auch wenn sie durch einen übergebenen Sanitizer erlaubt sind. Insbesondere werden die folgenden Elemente immer entfernt: <script>, <frame>, <iframe>, <embed>, <object>, <use> und Event-Handler-Attribute.
Diese Methode wird empfohlen (falls unterstützt), um sie als direkten Ersatz für ShadowRoot.innerHTML zu verwenden, wenn ein vom Nutzer bereitgestellter HTML-String gesetzt wird.
Ein String, der HTML definiert, das bereinigt und in das Shadow-Root injiziert wird.
options OptionalEin Optionsobjekt mit den folgenden optionalen Parametern:
sanitizerEin Sanitizer- oder SanitizerConfig-Objekt, das definiert, welche Elemente des Inputs erlaubt oder entfernt werden, oder der String "default" für die Standardkonfiguration des Sanitizers. Die Methode entfernt alle XSS-unsicheren Elemente und Attribute, auch wenn sie durch den Sanitizer erlaubt sind. Falls nicht angegeben, wird die Standardkonfiguration des Sanitizer verwendet.
Beachten Sie, dass es effizienter sein kann, einen Sanitizer zu verwenden und diesen bei Bedarf zu modifizieren, wenn Sie dieselbe Konfiguration mehrfach verwenden.
Keiner (undefined).
Diese Ausnahme wird ausgelöst, wenn options.sanitizer aufgerufen wird mit:
Die setHTML()-Methode bietet eine XSS-sichere Methode, einen HTML-String zu parsen und zu bereinigen und ihn zu verwenden, um den bestehenden Baum im Shadow DOM zu ersetzen.
setHTML() entfernt alle HTML-Entitäten, die nicht durch die Konfiguration des Sanitizers erlaubt sind, und entfernt zudem alle XSS-unsicheren Elemente oder Attribute — unabhängig davon, ob sie durch die Sanitizer-Konfiguration erlaubt sind.
Falls im Parameter options.sanitizer kein Sanitizer angegeben wird, wird setHTML() mit der Standardkonfiguration des Sanitizers verwendet. Diese Konfiguration ist für die meisten Anwendungsfälle geeignet, da sie XSS-Angriffe sowie andere Angriffe wie Clickjacking oder Spoofing verhindert.
Ein benutzerdefinierter Sanitizer oder SanitizerConfig kann angegeben werden, um auszuwählen, welche Elemente, Attribute und Kommentare erlaubt oder entfernt werden. Beachten Sie, dass selbst wenn unsichere Optionen durch den Sanitizer erlaubt werden, sie bei Verwendung dieser Methode trotzdem entfernt werden (es entfernt dieselben Elemente wie ein Sanitizer, bei dem Sanitizer.removeUnsafe() aufgerufen wurde).
setHTML() sollte anstelle von ShadowRoot.innerHTML verwendet werden, um unzuverlässige HTML-Strings in das Shadow DOM einzufügen. Es sollte auch anstelle von ShadowRoot.setHTMLUnsafe() verwendet werden, es sei denn, es besteht ein spezifisches Bedürfnis, unsichere Elemente und Attribute zuzulassen.
Beachten Sie, dass, da diese Methode immer Eingabe-Strings von XSS-unsicheren Entitäten bereinigt, sie nicht mit der Trusted Types API gesichert oder validiert wird.
Dieses Beispiel zeigt einige der Möglichkeiten, setHTML() zu verwenden, um einen HTML-String zu bereinigen und zu injizieren.
Zuerst werden wir das ShadowRoot erstellen, das wir anvisieren wollen. Dies könnte programmgesteuert mit Element.attachShadow() erstellt werden, aber für dieses Beispiel werden wir das Root deklarativ erstellen.
Wir können wie folgt eine Referenz auf das Shadow Root vom #host-Element erhalten:
Der folgende Code zeigt, wie wir setHTML() mit einem String und verschiedenen Sanitisern aufrufen können, um das HTML in das Shadow Root zu filtern und zu injizieren.
Dieses Beispiel bietet eine "live" Demonstration der Methode, wenn sie mit verschiedenen Sanitisern aufgerufen wird. Der Code definiert Buttons, die Sie anklicken können, um einen HTML-String mit einem Standard- und einem benutzerdefinierten Sanitizer zu bereinigen und zu injizieren. Der ursprüngliche String und das bereinigte HTML werden protokolliert, damit Sie die Ergebnisse in jedem Fall inspizieren können.
Das HTML definiert zwei <button>-Elemente zum Anwenden verschiedener Sanitisern, einen weiteren Button zum Zurücksetzen des Beispiels und ein <div>, das das deklarative Shadow Root enthält.
Zuerst definieren wir den Handler für den Neuladen-Button.
Dann definieren wir den zu bereinigenden String, der für alle Fälle gleich ist. Dieser enthält das <script>-Element und den onclick-Handler, die beide als XSS-unsicher gelten. Wir erhalten auch die Variable shadow, die unsere Referenz zum Shadow Root ist.
Als nächstes definieren wir den Click-Handler für den Button, der das Shadow Root mit dem Standard-Sanitizer setzt. Dieser soll alle unsicheren Entitäten vor dem Einfügen des HTML-Strings entfernen. Beachten Sie, dass Sie genau sehen können, welche Elemente in den Beispielen des Sanitizer()-Konstruktors entfernt werden.
Der nächste Click-Handler setzt das Ziel-HTML mit einem benutzerdefinierten Sanitizer, der nur <div>, <p> und <script>-Elemente erlaubt. Beachten Sie, dass, weil wir die setHTML-Methode verwenden, <script> trotzdem entfernt wird!
Klicken Sie auf die Buttons "Default" und "allowScript", um die Effekte des Standard- und des benutzerdefinierten Sanitizers zu sehen.
Beachten Sie, dass, weil wir eine sichere Bereinigungsmethode verwenden, in beiden Fällen das <script>-Element und der onclick-Handler entfernt werden, selbst wenn sie ausdrücklich vom Sanitizer erlaubt sind. Während jedoch das data--Attribut mit dem Standard-Sanitizer entfernt wird, ist es erlaubt, wenn wir einen Sanitizer übergeben.
| HTML Sanitizer API # dom-shadowroot-sethtml |
JavaScript aktivieren, um diese Browser-Kompatibilitätstabelle anzuzeigen.
Der Bauplan für ein besseres Internet.
Besuche die gemeinnützige Muttergesellschaft der Mozilla Corporation, die Mozilla Foundation.
Teile dieses Inhalts sind ©1998–2026 von einzelnen mozilla.org-Mitwirkenden. Inhalte sind verfügbar unter einer Creative-Commons-Lizenz.