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,filterodermaskauf 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
onbeginnt, ist über eine eigene Regel schon gesperrt. - Du willst
hreferlauben. Das geht über diesen Filter nicht.
Parameter
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
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:
- Besteht er nur aus
a-z,0-9,:,_und-? Wenn nicht, ist der Grundinvalid. - Steht der volle Name oder der Teil nach dem letzten Doppelpunkt auf der Sperrliste? Dann
dangerous. - Beginnt der volle Name oder dieser letzte Teil mit
on? Dann ebenfallsdangerous.
Ein über diesen Filter ergänzter Name hört also sofort auf zu wirken, auch dort, wo er früher gespeichert wurde.
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
hrefzu entfernen bringt nichts. Es kommt wieder dazu.onist eine Präfix-Regel. Ein harmloser Name, der zufällig mitonbeginnt, lässt sich auch nicht erlauben.- Ein Namespace-Präfix hilft nicht.
x:hrefwird abgelehnt, weil sein letzter Teilhrefist. - Anderer Code wird nicht geprüft. Attribute, die ein anderes Plugin über
esw_svg_allowed_attributesergänzt, laufen nicht durch diese Liste.