SanitizerConfig
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.
Das SanitizerConfig Dictionary der HTML Sanitizer API gibt an, welche Elemente, Attribute und Kommentare erlaubt sind oder entfernt werden sollen, wenn HTML-Strings in ein Element oder ShadowRoot eingefügt werden oder wenn ein HTML-String in ein Document geparst wird.
Beachten Sie, dass in der Regel Sanitizer-Instanzen anstelle von SanitizerConfig-Objekten verwendet werden, da sie effizienter zu teilen und zu modifizieren sind.
Instanzeigenschaften
elements-
Ein Array, das die zu erlaubenden Elemente beim HTML-Sanitisieren angibt und optional ihre erlaubten oder zu entfernenden Attribute spezifiziert.
Jedes Element kann durch seinen Namen (ein String) oder als Objekt mit folgenden Eigenschaften angegeben werden:
name-
Ein String, der den Namen des Elements enthält.
namespaceOptional-
Ein String, der den Namensraum des Elements enthält. Der Standard-Namensraum ist
"http://www.w3.org/1999/xhtml". attributesOptional-
Ein Array, das die Attribute angibt, die bei diesem (erlaubten) Element beim HTML-Sanitisieren zugelassen werden.
Jedes Attribut kann durch seinen Namen (ein String) oder als Objekt mit folgenden Eigenschaften angegeben werden:
name-
Ein String, der den Namen des Attributs enthält.
namespaceOptional-
Ein String, der den Namensraum des Attributs enthält, der standardmäßig
nullist.
removeAttributesOptional-
Ein Array, das die Attribute angibt, die bei diesem (erlaubten) Element beim HTML-Sanitisieren entfernt werden sollen.
Jedes Attribut kann durch seinen Namen (ein String) oder als Objekt mit folgenden Eigenschaften angegeben werden:
name-
Ein String, der den Namen des Attributs enthält.
namespaceOptional-
Ein String, der den Namensraum des Attributs enthält, der standardmäßig
nullist.
removeElements-
Ein Array, das die zu entfernenden Elemente beim HTML-Sanitisieren angibt.
Jedes Element kann durch seinen Namen (ein String) oder als Objekt mit folgenden Eigenschaften angegeben werden:
name-
Ein String, der den Namen des Elements enthält.
namespaceOptional-
Ein String, der den Namensraum des Elements enthält. Der Standard-Namensraum ist
"http://www.w3.org/1999/xhtml".
replaceWithChildrenElements-
Ein Array, das die Elemente angibt, die beim Sanitisieren von HTML mit ihrem Inhalt ersetzt werden sollen. Dies wird hauptsächlich verwendet, um Stile von Text zu entfernen (zum Beispiel könnten Sie damit
<b>some text</b>insome textumwandeln).Jedes Element kann durch seinen Namen (ein String) oder als Objekt mit folgenden Eigenschaften angegeben werden:
name-
Ein String, der den Namen des Elements enthält.
namespaceOptional-
Ein String, der den Namensraum des Elements enthält. Der Standard-Namensraum ist
"http://www.w3.org/1999/xhtml".
attributes-
Ein Array, das die Attribute angibt, die beim HTML-Sanitisieren zugelassen werden.
Jedes Attribut kann durch seinen Namen (ein String) oder als Objekt mit folgenden Eigenschaften angegeben werden:
name-
Ein String, der den Namen des Attributs enthält.
namespaceOptional-
Ein String, der den Namensraum des Attributs enthält, der standardmäßig
nullist.
removeAttributes-
Ein Array, das die Attribute angibt, die von Elementen entfernt werden sollen, wenn HTML sanitisiert wird.
Jedes Attribut kann durch seinen Namen (ein String) oder als Objekt mit folgenden Eigenschaften angegeben werden:
name-
Ein String, der den Namen des Attributs enthält.
namespaceOptional-
Ein String, der den Namensraum des Attributs enthält, der standardmäßig
nullist.
comments-
true, wenn Kommentare erlaubt sind, undfalse, wenn sie entfernt werden sollen. dataAttributes-
true, wenn alledata-*Attribute erlaubt sind (in diesem Fall dürfendata-*Attribute nicht imattributesArray aufgelistet sein). Fallsfalse, müssen alle zu erlaubendendata-*Attribute imattributesArray aufgelistet sein.
Beschreibung
Ein SanitizerConfig spezifiziert, welche Elemente, Attribute und Kommentare erlaubt sind oder entfernt werden sollen, wenn HTML-Strings in ein Element oder ShadowRoot eingefügt werden oder wenn ein HTML-String in ein Document geparst wird.
Eine Instanz dieses Typs kann an den Konstruktor von Sanitizer() übergeben werden, um einen Sanitizer zu konfigurieren, und wird von Sanitizer.get() zurückgegeben.
Sie kann auch als option.sanitizer Parameter beim Aufrufen der Sanitisierungsmethoden übergeben werden:
setHTML()odersetHTMLUnsafe()aufElement.setHTML()odersetHTMLUnsafe()aufShadowRoot.Document.parseHTML()oderDocument.parseHTMLUnsafe()statische Methoden.
Gültige Konfiguration
Die Struktur des Konfigurationsobjekts erlaubt die Deklaration von Filteroptionen, die widersprüchlich oder redundant sind, wie z.B. ein Element sowohl in den Erlauben- als auch den Entfernen-Listen anzugeben oder ein Attribut mehrfach in einer Liste zu führen.
Um jegliche Mehrdeutigkeit zu vermeiden, erfordern Methoden, die eine SanitizerConfig-Instanz verwenden, dass ein gültiges Konfigurationsobjekt übergeben wird, und werfen einen TypeError, wenn eine ungültige Konfiguration verwendet wird.
In einer gültigen Sanitizer-Konfiguration:
-
Entweder das
elementsoder dasremoveElementsArray kann definiert werden, aber nicht beide.Hinweis: Es ist unmöglich, pro Elemente Attribute zu definieren, wenn das
removeElementsArray definiert ist, da diese den Elementen imelementsArray hinzugefügt werden. -
Entweder das globale
attributesoder dasremoveAttributesArray kann definiert werden, aber nicht beide. -
Das
replaceWithChildrenElementsArray, falls definiert, darf keine Elemente gemeinsam mitelementsoderremoveElementsenthalten. -
Kein Array darf doppelte Elemente oder Attribute enthalten.
-
Wenn das globale
attributesArray definiert ist:- Ein Element kann beliebig
attributesund/oderremoveAttributesdefinieren. - Die
attributeseines Elements dürfen keine gemeinsamen Werte mit dem globalenattributesArray haben. - Das
removeAttributesArray eines Elements darf nur Werte enthalten, die auch im globalenattributesArray vorhanden sind. - Wenn
dataAttributestrueist, dürfen die globalen und elementbezogenen Attribut-Arrays keinedata-*Attribute enthalten (da diese automatisch erlaubt werden).
- Ein Element kann beliebig
-
Wenn das globale
removeAttributesArray definiert ist:- Ein Element darf entweder
attributesoderremoveAttributesspezifizieren, aber nicht beides. - Das
attributesoderremoveAttributesArray eines Elements, je nachdem welches (falls eines) definiert ist, darf keine gemeinsamen Werte mit dem globalenremoveAttributesArray haben. - Das
dataAttributesBoolean darf nicht definiert sein.
- Ein Element darf entweder
Das leere Objekt {} ist eine gültige Konfiguration.
Hinweis:
Die oben genannten Bedingungen gelten aus der Sicht eines Webentwicklers.
Die Gültigkeitsprüfung, die in der Spezifikation definiert ist, ist leicht unterschiedlich, da sie nach der Kanonisierung der Konfiguration ausgeführt wird, wie z.B. das Hinzufügen von removeElements, wenn beide fehlen, und das Hinzufügen von Standard-Namensräumen.
Erlauben- und Entfernen-Konfigurationen
Eine der Hauptimplikationen des vorhergehenden Abschnitts ist, dass eine gültige Konfiguration entweder elements oder removeElements Arrays (aber nicht beide) und entweder das attributes oder removeAttributes Arrays (aber nicht beide) spezifizieren kann.
Eine Konfiguration, die die elements und/oder attributes Arrays enthält, wird als Erlauben-Konfiguration bezeichnet, da sie das Sanitisierungsverhalten in Bezug auf die Werte definiert, die im Ausgang erlaubt sein sollen.
Eine Entfernen-Konfiguration ist eine, die entweder removeElements und/oder removeAttributes enthält und das Verhalten in Bezug auf die Werte definiert, die aus dem Ausgang entfernt werden sollen.
Beispiele
>Erstellen einer "Erlauben"-Konfiguration
Dieses Beispiel zeigt, wie Sie eine "Erlauben"-Sanitizer-Konfiguration erstellen können, die bestimmte Elemente und Attribute erlaubt, <b> Elemente durch ihre Kinder ersetzt, Kommentare im Ausgang enthalten lässt und erfordert, dass data-* Attribute explizit im attributes Array aufgelistet sind, um eingeschlossen zu werden.
Das Konfigurationsobjekt wird dem Konstruktor von Sanitizer() übergeben.
const sanitizer = new Sanitizer({
elements: ["div", "p", "script"],
attributes: ["id"],
replaceWithChildrenElements: ["b"],
comments: true,
dataAttributes: false,
});
Erstellen einer "Entfernen"-Konfiguration
Dieses Beispiel zeigt, wie Sie eine "Entfernen"-Sanitizer-Konfiguration erstellen können, die sowohl Elemente als auch Attribute entfernt.
const sanitizer = new Sanitizer({
removeElements: ["span", "script"],
removeAttributes: ["lang", "id"],
comments: false,
});
Erlaubte Element- und Entfernte Attribut-Konfiguration
Dieses Beispiel zeigt, wie Sie eine "Hybrid"-Sanitizer-Konfiguration erstellen können, die einige Elemente erlaubt und bestimmte Attribute entfernt. Ähnlich könnten Sie eine Konfiguration spezifizieren, die Elemente entfernt und Attribute erlaubt.
const sanitizer = new Sanitizer({
elements: ["span", "script"],
removeAttributes: ["lang", "id"],
});
Beachten Sie, dass das gleichzeitige Vorhandensein von Erlauben- und Entfernen-Arrays für Elemente oder Erlauben- und Entfernen-Arrays für Attribute keine gültige Konfiguration darstellt und zu einem TypeError führen würde.
Ungültige Konfigurationen
Dieser Abschnitt zeigt einige ungültige Konfigurationen.
Diese werfen einen TypeError.
Ungültig, weil sowohl elements als auch removeElements definiert sind:
const sanitizer1 = new Sanitizer({
elements: ["span", "script"],
removeElements: ["div", "b"],
});
Ungültig, weil <span> sowohl in elements als auch in replaceWithChildrenElements vorkommt:
const sanitizer2 = new Sanitizer({
elements: ["span", "div"],
replaceWithChildrenElements: ["span"],
});
Ungültig, weil das redundante Attribut "data-test" definiert ist, wenn dataAttributes wahr ist:
const sanitizer3 = new Sanitizer({
attributes: ["lang", "id", "data-test"],
dataAttributes: true,
});
Ungültig, weil removeAttributes und dataAttributes definiert sind:
const sanitizer4 = new Sanitizer({
removeAttributes: ["lang", "id"],
dataAttributes: true,
});
Spezifikationen
| Specification |
|---|
| HTML Sanitizer API> # dom-sanitizer-get> |
| HTML Sanitizer API> # dom-sanitizer-sanitizer> |