Erlaube HTML Ausgabe mit WordPress Escaping wie esc_html();
Die Sicherheit ist ein wichtiger Bestandteil bei der Entwicklung von WordPress Themes und Plugins. Aus diesem Grund sollten alle auf der Website ausgegebenen Variablen bzw. Feldwerte entsprechend escaped werden.
Was bedeutet escaped?
Wenn wir in PHP von escapender Ausgabe sprechen, bedeutet dies, dass die Ausgabe einer Variable bzw. eines Feldwertes, aus Sicherheitsgründen, nur zu bestimmten Bedingungen gewährleistet ist.
Ein Beispiel: Wir haben in unserem WordPress Plugin ein Feld, in dem wir einen Text eintragen können. Tragen wir neben diesem Text auch ein <script> – Tag ein, dann wird dieses vor der Ausgabe oder auch vor dem Speichern des Feldwertes, automatisch escaped. Das Einfügen eines <script> – Tags ist somit nicht möglich. Das hat einen einfachen Grund. Durch Einfügen von Scripten, kann Schadcode in WordPress bzw. deine Webseite eingeschleust werden und Schaden anrichten.
Je nach Anwendungsfall und unter der Voraussetzung wie ein Feldwert escaped wird, ist auch das Herausfiltern von HTML-Code oder bestimmten Zeichen möglich.
Welche Funktionen bietet WordPress zum escapen?
WordPress stellt bereits einige Funktionen bereit, welche wir für das Escapen von Feldwerten verwenden können. Mehr darüber kannst du hier lesen.
- esc_html() – Verwende diese Funktion wenn ein HTML-Element einen angezeigten Feldwert einschließt.
- esc_url() – Verwende dies Funktion für alle URLs, oder innerhalb von Attributen wie src und href eines HTML-Elements.
- esc_js() – Verwende diese Funktion für Inline-Javascript.
- esc_attr() – Verwende diese Funktion in allen Attributen eines HTML-Elements.
- esc_textarea() – Verwende diese Funktion zum kodieren von Text in einem Textarea-Element.
Was ist richtig und was ist falsch?
Bei der Ausgabe von Feldwerten innerhalb deines WordPress Themes oder Plugins ist zu beachten, dass Variablen, welche einen Feldwert ausgeben, immer escaped werden.
FALSCH: Den Feldwert ohne Escaping ausgeben.
RICHTIG: Den Feldwert vor der Ausgabe escapen.
Wie erlaube ich HTML in WordPress Variablen, wenn diese escaped sind?
Zugunsten der Sicherheit, erschwert uns das Escapen von Feldwerten, die Anzeige von HTML-Code, wenn dieser ein wichtiger Bestandteil der Feldwert-Ausgabe ist. Wie wir trotzdem divierse HTML-Element und Attribute mit Hilfe des WordPress-Filters wp_kses_allowed_html
erlauben können, zeige ich im folgenden Beispiel.
Weitere WordPress-Funktionen zum Escapen von Feldwerten sind wp_kses() oder wp_kses_post(). Diese Funktionen können wir bspw. anstelle von esc_html() nutzen, wenn wir bestimmte HTML-Elemente und Attribute erlauben wollen.
Die folgende Funktion enthält eine Sammlung von häufig verwendeten, HTML-Tags und deren Attributen, welche unter der Verwendung von echo wp_kses_post( $variable );
erlaubt sind.
So verwendest du wp_kses();
In Verbindung mit zugelassenen HTML-Elementen und Attributen, kannst du wp_kses() auf folgende Art und Weise nutzen:
Wenn du allerdings in einem bestimmten Fall eine besondere Prüfung anwenden möchtest, lässt sich wp_kses() auch erweitern und anwenden. Im Beispiel bei der Ausgabe eines SVG-Elements, definieren wird folgende Funktion mit speziell für diesen Fall zugelassenen HTML-Elementen deren Attributen.
Die Verwendung der oberen Funktionen, erleichtert uns somit die Ausgabe von erwünschten HTML-Code innerhalb eines Feldwertes. So kannst du Variablen immer mit wp_kses_post()
escapen und trotzdem diverse HTML-Elemente und Attribute in WordPress zulassen. Die Liste der zulässigen Tags und Attribute kann natürlich noch erweitert oder eingeschränkt werden.