Signatur
Beschreibung
get() liest die Konfiguration aus, die ein Sanitizer-Objekt gerade verwendet. Du bekommst ein neues SanitizerConfig-Objekt mit den Schlüsseln, die zur Konfiguration passen: bei einer Erlaubnisliste elements und attributes, bei einer Sperrliste removeElements und removeAttributes. Dazu können replaceWithChildrenElements, comments und dataAttributes kommen.
Die Angaben kommen in normalisierter Form zurück. Auch wenn du Elemente beim Erstellen nur als Zeichenkette angegeben hast (z. B. "p"), liefert get() Objekte wie { name: "p", namespace: "http://www.w3.org/1999/xhtml" }. Attribute haben in der Regel namespace: null. Elementbezogene Attributlisten stehen bei den jeweiligen Element-Einträgen, also unter attributes oder removeAttributes.
Typische Einsätze sind: die Standardkonfiguration untersuchen (new Sanitizer().get()), die Wirkung von Änderungen wie allowElement() oder removeAttribute() prüfen, Konfigurationen in Tests vergleichen oder einen Sanitizer kopieren (new Sanitizer(original.get())).
Das zurückgegebene Objekt ist eine Kopie. Wenn du es änderst, bleibt der Sanitizer unverändert. Dafür gibt es die Änderungsmethoden des Sanitizer.
Rückgabewert
elements/removeElements, attributes/removeAttributes, replaceWithChildrenElements, comments und dataAttributes.Beispiele
Standardkonfiguration untersuchen
if ('Sanitizer' in window) {
const sanitizer = new Sanitizer(); // Standardkonfiguration
const config = sanitizer.get();
const namen = config.elements.map((el) => el.name);
console.log('Erlaubt <p>?', namen.includes('p'));
console.log('Erlaubt <script>?', namen.includes('script'));
} else {
console.warn('Sanitizer API wird nicht unterstützt.');
}
Änderungen an der Konfiguration prüfen
const sanitizer = new Sanitizer({ elements: ['p', 'b'] });
sanitizer.allowElement('i');
sanitizer.removeElement('b');
const namen = sanitizer
.get()
.elements.map(({ name }) => name)
.sort(); // Reihenfolge nicht voraussetzen
console.log(namen);
console.log(sanitizer.get().elements[0].namespace);
Sanitizer kopieren und unabhängig anpassen
const basis = new Sanitizer({ elements: ['p', 'a', 'em'], attributes: ['href'] });
// get() liefert eine Kopie, daraus entsteht ein neuer Sanitizer
const kommentarSanitizer = new Sanitizer(basis.get());
kommentarSanitizer.removeElement('a');
const hat = (s, tag) => s.get().elements.some((el) => el.name === tag);
console.log('Basis erlaubt <a>:', hat(basis, 'a'));
console.log('Kopie erlaubt <a>:', hat(kommentarSanitizer, 'a'));
document.querySelector('#kommentar')
?.setHTML('<p>Hallo <a href="https://example.com">Link</a></p>', {
sanitizer: kommentarSanitizer,
});
Konfiguration für Tests oder Protokolle serialisieren
const sanitizer = new Sanitizer({ removeElements: ['iframe', 'object'] });
const snapshot = JSON.stringify(sanitizer.get());
// Ein Ändern des Rückgabewerts wirkt sich nicht auf den Sanitizer aus
const config = sanitizer.get();
config.removeElements = [];
console.log(JSON.stringify(sanitizer.get()) === snapshot);
// Wichtig · Fallstricke
- Experimentelle API: Die HTML Sanitizer API wird noch nicht überall unterstützt, in Chromium-Browsern zum Beispiel nur mit Flag. Prüfe vor der Nutzung mit
'Sanitizer' in window, ob sie verfügbar ist, und plane eine Ausweichlösung wie DOMPurify ein. Ältere Entwürfe hatten stattdessengetConfiguration()undsanitize(), die sich anders verhielten. - Normalisierte Form: Vergleiche die Ergebnisse nicht direkt mit deinen Zeichenketten aus dem Konstruktor. Die Einträge sind Objekte mit
nameundnamespace. Verlass dich auch nicht auf eine bestimmte Reihenfolge der Listen. - Kopie statt Referenz: Änderungen am Rückgabewert wirken sich nicht auf den Sanitizer aus. Nutze dafür
allowElement(),removeElement(),allowAttribute()und die anderen Änderungsmethoden. - Sicherheit:
get()zeigt nur die Konfiguration. Auch wenn dort unsichere Elemente wie<script>erlaubt sind, entferntElement.setHTML()sie trotzdem immer.setHTMLUnsafe()dagegen übernimmt die Konfiguration genau so. Wenn du eine Konfiguration von außen übernimmst, entferne vorher mitremoveUnsafe()alle unsicheren Einträge.