Bösartige URL-Anfragen zurückweisen
Ein Filter gegen die immergleichen automatisierten Sondierungen – kein Ersatz für eine Firewall, aber auch kein Aufwand.
Der Schnipsel
add_action( 'init', function () {
// Angemeldete Administratoren nicht behindern - sie rufen im
// Backend durchaus Adressen auf, die hier auffallen wuerden.
if ( current_user_can( 'administrator' ) ) {
return;
}
$anfrage = $_SERVER['REQUEST_URI'] ?? '';
$verdaechtig = strlen( $anfrage ) > 255
|| stripos( $anfrage, 'eval(' ) !== false
|| stripos( $anfrage, 'base64_' ) !== false
|| stripos( $anfrage, 'UNION' ) !== false
|| stripos( $anfrage, 'CONCAT(' ) !== false
|| stripos( $anfrage, '../' ) !== false;
if ( $verdaechtig ) {
status_header( 403 );
nocache_headers();
exit;
}
} );
Damit landen die typischen automatisierten Sondierungen sofort im Nichts, statt WordPress vollständig zu durchlaufen.
Was gegenüber der verbreiteten Fassung anders ist
Dieser Schnipsel kursiert seit Jahren in einer Fassung, die mit
global $user_ID; if ( $user_ID ) { … } beginnt. Diese
Fassung prüft nur angemeldete Besucher – und damit
nie denjenigen, um den es geht.
Wenn du den Code irgendwo so findest: Er tut nichts. Das ist schlimmer als kein Code, weil man sich darauf verlässt.
Die zweite Änderung betrifft die Antwort:
- Die alte Fassung antwortete mit 414 („URI Too Long"). Das stimmt nur bei überlangen Adressen.
- Hier steht 403 („Forbidden") – die zutreffende Antwort auf eine Anfrage, die abgewiesen wird. Das ist keine Kosmetik: Serverprotokolle und Auswertungen werden nach Statuscode ausgewertet.
Was er nicht kann
Der Filter erkennt Muster in der Adresse. Er sieht nicht, was per Formular gesendet wird, er kennt keine Absender, und er lernt nichts dazu. Gegen einen gezielten Angriff hilft er nicht.
Wogegen er hilft: gegen das Grundrauschen. Jede öffentlich erreichbare WordPress-Installation bekommt täglich Dutzende automatisierte Anfragen, die reihum bekannte Lücken durchprobieren. Die kosten Rechenzeit, und sie füllen die Protokolle.
Prüfe nach dem Einbau, ob deine Seite noch normal funktioniert – besonders Suchfunktion, Filter und Shop. Ein Suchbegriff mit „union" darin würde hier hängenbleiben. Wenn dir das passiert, entferne dieses eine Muster, statt den ganzen Schnipsel zu verwerfen.
Wohin der Code gehört
Nicht in die functions.php des Themes – beim nächsten
Theme-Update ist er weg. Richtig sind ein Child-Theme
oder ein Code-Plugin wie „Code Snippets" oder „WPCode". Und vorher
eine Sicherung
anlegen.
Passt das nicht auf deinen Fall?
Dieser Artikel beantwortet die Frage allgemein – deine ist vermutlich konkreter. Schreib mir kurz, worum es geht. Ich antworte selbst, meist am selben Tag, und es kostet nichts.
Hat dir das geholfen?
Dann sag es weiter. Eine kurze Bewertung dauert dreißig Sekunden und sorgt dafür, dass die Nächsten diese Antwort überhaupt finden.
Passt dazu
- WordPress Wie kann ich WordPress sichern? WordPress selbst kann es nicht – ein Plugin schon, in zehn Minuten eingerichtet. Wichtiger als das Anlegen ist allerdings, wo die Sicherung liegt.
- SEO Kann man IP-Adressen mit der robots.txt aussperren? Nein. Die robots.txt kennt keine IP-Adressen – sie ist eine Bitte an Programme, keine Zugangskontrolle. Was stattdessen funktioniert, steht hier.
- Schnipsel WordPress-Suchfunktion deaktivieren Ein Schnipsel für die Fälle, in denen die eingebaute Suche mehr stört als hilft – ohne die Suche im Verwaltungsbereich mit abzuschalten.
- Schnipsel Mengenfeld auf der WooCommerce-Warenkorbseite ausblenden Vier Zeilen – mit einer Nebenwirkung, die man kennen sollte, bevor man sie einsetzt.