Begriffe vorab
- Validierung: Prüfen, ob eine Eingabe dem Erwarteten entspricht, und sie sonst ablehnen.
- Sanitization: Eingaben bereinigen, bevor sie gespeichert oder weiterverwendet werden.
- Escaping: Ausgaben unmittelbar vor der Darstellung kodieren.
- Nonce: Einmalig gültiger Wert zum Nachweis, dass eine Anfrage beabsichtigt ist.
- Capability: Eine Berechtigung, die vor sensiblen Aktionen geprüft wird.
Die Grundregel
Das WordPress-Entwicklerhandbuch fasst die Datenbehandlung so zusammen: Daten aus nicht vertrauenswürdigen Quellen werden so früh wie möglich validiert und bereinigt und so spät wie möglich kodiert. Validierung lehnt Unpassendes ab, Bereinigung schützt Speicherung und Logik, Escaping schützt die Ausgabe – auch dann, wenn die Daten vorher bereinigt wurden.
Die vier Bausteine einer sicheren Aktion
- Berechtigung: Prüfe mit
current_user_can(), ob die Person die Aktion ausführen darf. - Absicht: Prüfe einen Nonce, damit keine fremde Seite die Aktion auslösen kann.
- Eingaben: validiere und bereinige (
wp_unslashund passendesanitize_*-Funktionen). - Ausgabe: kodiere mit passenden
esc_*-Funktionen.
function mein_plugin_speichern() {
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( 'Keine Berechtigung.' );
}
check_admin_referer( 'mein_plugin_speichern' ); // Nonce prüfen
$titel = isset( $_POST['titel'] )
? sanitize_text_field( wp_unslash( $_POST['titel'] ) )
: '';
update_option( 'mein_plugin_titel', $titel );
}
// Ausgabe
echo esc_html( get_option( 'mein_plugin_titel' ) );
Was ein Nonce nicht ist
Ein Nonce weist nach, dass eine Anfrage aus deiner Oberfläche stammt; er ersetzt keine Berechtigungsprüfung. Beide Prüfungen gehören zusammen – das ist wieder das Prinzip der gestuften Absicherung aus der Lektion über Entwurfsprinzipien.
Typische Fehler
- Prüfung nur im Browser (JavaScript) statt auf dem Server.
- Ausgabe ohne
esc_*, weil „die Daten ja schon bereinigt sind“. - Datenbankabfragen mit zusammengesetzten Zeichenketten statt
$wpdb->prepare(). - Berechtigungsprüfung vergessen, weil der Link nur Administratoren angezeigt wird.
Prüfe bei jedem Formular- oder AJAX-Handler zuerst die Berechtigung, dann den Nonce, dann die Eingaben.
Zum Selbermachen
- Gehe ein eigenes Plugin durch und markiere jeden Handler, dem eine der vier Prüfungen fehlt.
- Ersetze eine zusammengesetzte SQL-Abfrage durch eine mit Platzhaltern.
Verwandte Themen
WordPress → „WordPress-Plugin-Deepdive“ behandelt Hooks, Einstellungen und Sicherheit im Zusammenhang. Webanwendungen → „Injection, XSS und CSRF“ erklärt die Angriffe, gegen die diese Funktionen schützen.
Prüfstatus: Belegt (Stand 1. Oktober 2026): Die Grundregeln (früh validieren und bereinigen, spät kodieren), Nonces für Formulare und Berechtigungsprüfungen mit current_user_can wurden gegen die WordPress-Dokumentation (Developer Resources, Learn WordPress) geprüft. Nicht einzeln belegt: das konkrete Codebeispiel (konstruiert und nicht in einer WordPress-Installation ausgeführt) und die Liste typischer Fehler (Einordnung in eigenen Worten).
Quellen
- WordPress Developer Resources – „Security“ (developer.wordpress.org/themes/advanced-topics/security)
- Learn WordPress – „Introduction to securely developing plugins“
- WordPress Plugin Handbook – „Common issues“