Konfiguratoreasy_svg_pro_dangerous_tags

easy_svg_pro_dangerous_tags

Ergänze SVG-Elemente, die der Konfigurator von Easy SVG Pro nie auf die Allow-Liste setzen darf. Der Filter kann nur Namen hinzufügen, nie entfernen.

Filter · Easy SVG Pro · Status: Stabil

Im Konfigurator kann ein Administrator zusätzliche SVG-Elemente erlauben, die der Sanitizer sonst entfernt. Manche Elemente sind dort nie erlaubt, weil sie Code ausführen oder andere Dokumente nachladen können. Mit diesem Filter setzt du weitere Namen auf diese Sperrliste, etwa damit auf keiner Kundenseite jemand image erlauben kann.

Verwendung

apply_filters( 'easy_svg_pro_dangerous_tags', string[] $tags )

Angewendet in includes/configurator/configurator.php, in dangerous_tags(). Das Ergebnis wird in ein Array umgewandelt, jeder Name in einen String in Kleinbuchstaben, und die Liste wird mit den eingebauten Namen zusammengeführt.

Wann du es brauchst

  • Du betreust Kundenseiten und willst eine strengere Regel als den Standard, zum Beispiel keine Elemente image, use oder a, egal was ein Administrator in den Konfigurator tippt.
  • Dein Security-Review hat ein Element markiert und du willst es überall auf einmal zurückziehen, auch auf Seiten, auf denen es schon erlaubt war.

Nicht dafür gedacht:

  • Du willst einen der eingebauten Namen erlauben. Das geht über diesen Filter nicht (siehe Stolperfallen).
  • Du willst ändern, was der Sanitizer allgemein erlaubt. Das ist esw_svg_allowed_tags des kostenlosen Plugins.

Parameter

body
$tagsstring[]
Required

Die eingebauten gesperrten Namen in Kleinbuchstaben: script, style, foreignobject, iframe, embed, object, handler, listener, set, animate, animatecolor, animatemotion, animatetransform, discard, dazu jeder Name aus EASY_SVG_ICON_UNSAFE_ELEMENTS des kostenlosen Plugins, wenn die Konstante definiert ist.

Rückgabewert

returnstring[]

Namen, die zusätzlich zu den eingebauten gesperrt werden. Groß- und Kleinschreibung spielt keine Rolle. Was du zurückgibst, wird mit der eingebauten Liste zusammengeführt, ein Name, den du weglässt, bleibt also gesperrt.

Standardwert

Die eingebaute Liste oben, unverändert.

Beispiele

Eingebettete Bilder auf Kundenseiten sperren

/**
 * Ein <image> kann eine fremde Datei laden. Unsere Kunden brauchen das nie.
 */
function acme_dangerous_tags( $tags ) {
	$tags[] = 'image';
	$tags[] = 'feimage';

	return $tags;
}
add_filter( 'easy_svg_pro_dangerous_tags', 'acme_dangerous_tags' );

feImage steht in Kleinbuchstaben, weil jeder Name in Kleinbuchstaben verglichen wird.

Eine zentrale Regel aus einem Must-use-Plugin

/**
 * mu-plugins/acme-svg-policy.php, auf jeder Kundenseite ausgerollt.
 */
function acme_svg_policy_tags( $tags ) {
	return array_merge( (array) $tags, array( 'image', 'use', 'a', 'switch' ) );
}
add_filter( 'easy_svg_pro_dangerous_tags', 'acme_svg_policy_tags' );

Sehen, was gerade gesperrt ist

wp eval 'print_r( apply_filters( "easy_svg_pro_dangerous_tags", array() ) );'

Das zeigt nur deine Ergänzungen. Die volle Liste sind die eingebauten Namen plus diese.

So funktioniert es

Der Konfigurator speichert seine zusätzlichen Namen in der Option easy_svg_pro_settings (Schlüssel extra_tags und extra_attrs) und wendet sie nur an, solange sein Schalter tags_enabled an ist. Er braucht eine aktive Lizenz, aber kein Feature-Flag.

Die Sperrliste wird zu drei Zeitpunkten gelesen:

  1. Beim Speichern über POST /easy-svg-pro/v1/settings. Ein gesperrter Name fällt raus und kommt in rejected.extra_tags mit dem Grund dangerous zurück. Ein Name mit Zeichen außerhalb von a-z 0-9 : _ - kommt mit dem Grund invalid zurück.
  2. Bei jedem Lesen der Einstellungen, weil pro_settings() die gespeicherte Option jedes Mal neu bereinigt.
  3. Immer wenn der kostenlose Sanitizer nach seiner Allow-Liste fragt (esw_svg_allowed_tags), weil die zusätzlichen Namen vor dem Hinzufügen noch einmal geprüft werden.

Bei jedem Namen wird der volle Name und der Teil nach dem letzten Doppelpunkt geprüft, s:script wird also wie script abgelehnt. Jeder Name, der mit on beginnt, wird ebenfalls abgelehnt.

Ein hier ergänzter Name wirkt deshalb ab dem nächsten Request, auch auf Seiten, auf denen er früher gespeichert wurde: Er kommt nicht mehr auf die Allow-Liste, und der Konfigurator zeigt ihn nicht mehr.

Die readme sagt, über diesen Filter könntest du die Entscheidung selbst treffen und gesperrtes Markup zulassen. Der Code erlaubt das nicht: Dein Rückgabewert wird mit den eingebauten Namen zusammengeführt, script, style, foreignobject und die anderen lassen sich über den Konfigurator also nie erlauben. Nutze den Filter nur, um die Regel strenger zu machen, nie lockerer.

Stolperfallen

  • Einen Namen zu entfernen wirkt nicht. array_diff() oder ein leeres Array ändern nichts, die eingebauten Namen kommen wieder dazu.
  • Der Konfigurator sagt nicht, warum ein gespeicherter Name verschwunden ist. Hast du hier einen Namen ergänzt, sieht ein Administrator, der ihn früher erlaubt hat, nur, dass er aus dem Feld weg ist.
  • Es betrifft nur den Konfigurator. Namen, die anderer Code über den Filter esw_svg_allowed_tags des kostenlosen Plugins ergänzt, werden nicht gegen diese Liste geprüft.
  • Schon bereinigte Uploads bleiben, wie sie sind. Die neue Regel gilt für Dateien, die ab jetzt bereinigt werden. Prüf vorhandene Dateien mit dem SVG-Cleaner.

Siehe auch