Konfiguratoreasy_svg_pro_dangerous_attrs

easy_svg_pro_dangerous_attrs

Ergänze SVG-Attribute, die der Konfigurator von Easy SVG Pro nie erlauben darf. Wie beim Tag-Filter kannst du nur Namen zur Sperrliste hinzufügen.

Filter · Easy SVG Pro · Status: Stabil

Neben zusätzlichen Elementen kann ein Administrator im Konfigurator auch zusätzliche SVG-Attribute erlauben. href, xlink:href und jeder Event-Handler wie onload sind dort nie erlaubt. Mit diesem Filter setzt du weitere Attributnamen auf diese Sperrliste.

Verwendung

apply_filters( 'easy_svg_pro_dangerous_attrs', string[] $attrs )

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

Wann du es brauchst

  • Administratoren sollen keine Attribute erlauben können, die andere Ressourcen laden oder auf sie zeigen, etwa src, filter oder mask auf einer strengen Seite.
  • Du willst eine Regel für alle Kundenseiten, gesetzt in einem Must-use-Plugin statt in jedem Konfigurator.

Nicht dafür gedacht:

  • Du willst Event-Handler sperren. Jeder Name, der mit on beginnt, ist über eine eigene Regel schon gesperrt.
  • Du willst href erlauben. Das geht über diesen Filter nicht.

Parameter

body
$attrsstring[]
Required

Die eingebauten gesperrten Namen: href und xlink:href. Namen mit on am Anfang stehen nicht in dieser Liste, weil eine eigene Regel sie sperrt.

Rückgabewert

returnstring[]

Attributnamen, die zusätzlich zu den eingebauten gesperrt werden. Wird mit der eingebauten Liste zusammengeführt, in Kleinbuchstaben umgewandelt und von Doppelten befreit.

Standardwert

array( 'href', 'xlink:href' ).

Beispiele

Keine Filter und Masken aus dem Konfigurator

function acme_dangerous_attrs( $attrs ) {
	$attrs[] = 'filter';
	$attrs[] = 'mask';

	return $attrs;
}
add_filter( 'easy_svg_pro_dangerous_attrs', 'acme_dangerous_attrs' );

Tags und Attribute aus einem Regel-Array

/**
 * Eine Stelle für die SVG-Regel der Agentur.
 */
function acme_svg_policy() {
	return array(
		'tags'  => array( 'image', 'use' ),
		'attrs' => array( 'src', 'filter' ),
	);
}

function acme_policy_tags( $tags ) {
	return array_merge( (array) $tags, acme_svg_policy()['tags'] );
}
add_filter( 'easy_svg_pro_dangerous_tags', 'acme_policy_tags' );

function acme_policy_attrs( $attrs ) {
	return array_merge( (array) $attrs, acme_svg_policy()['attrs'] );
}
add_filter( 'easy_svg_pro_dangerous_attrs', 'acme_policy_attrs' );

So sieht die REST-Antwort aus

Schickst du einen gesperrten Namen an die Settings-Route, wird der Rest gespeichert und der gesperrte gemeldet:

curl -X POST https://example.com/wp-json/easy-svg-pro/v1/settings \
  -u admin:"xxxx xxxx xxxx xxxx xxxx xxxx" \
  -H "Content-Type: application/json" \
  -d '{"tags_enabled":true,"extra_attrs":["filter","vector-effect"]}'
{
  "tags_enabled": true,
  "extra_tags": [],
  "extra_attrs": ["vector-effect"],
  "rejected": {
    "extra_tags": [],
    "extra_attrs": [ { "name": "filter", "reason": "dangerous" } ]
  }
}

So funktioniert es

Die Attributliste wird zu denselben Zeitpunkten gelesen wie die Tag-Liste: beim Speichern der Konfigurator-Einstellungen, bei jedem Lesen und jedes Mal, wenn der kostenlose Sanitizer nach seiner Attribut-Allow-Liste fragt (esw_svg_allowed_attributes).

Für jeden Namen prüft der Konfigurator in dieser Reihenfolge:

  1. Besteht er nur aus a-z, 0-9, :, _ und -? Wenn nicht, ist der Grund invalid.
  2. Steht der volle Name oder der Teil nach dem letzten Doppelpunkt auf der Sperrliste? Dann dangerous.
  3. Beginnt der volle Name oder dieser letzte Teil mit on? Dann ebenfalls dangerous.

Ein über diesen Filter ergänzter Name hört also sofort auf zu wirken, auch dort, wo er früher gespeichert wurde.

Die readme beschreibt diese Filter als Weg, gesperrtes Markup selbst zuzulassen. Im Code wird dein Rückgabewert mit href und xlink:href zusammengeführt, beide lassen sich über den Konfigurator also nie erlauben, und Event-Handler sperrt eine eigene Regel. Der Filter kann die Regel nur strenger machen.

Stolperfallen

  • href zu entfernen bringt nichts. Es kommt wieder dazu.
  • on ist eine Präfix-Regel. Ein harmloser Name, der zufällig mit on beginnt, lässt sich auch nicht erlauben.
  • Ein Namespace-Präfix hilft nicht. x:href wird abgelehnt, weil sein letzter Teil href ist.
  • Anderer Code wird nicht geprüft. Attribute, die ein anderes Plugin über esw_svg_allowed_attributes ergänzt, laufen nicht durch diese Liste.

Siehe auch