Zum Inhalt springen
Termin vereinbaren (öffnet in einem neuen Fenster)

Bösartige URL-Anfragen zurückweisen

Ein Filter gegen die immergleichen automatisierten Sondierungen – kein Ersatz für eine Firewall, aber auch kein Aufwand.

Zuletzt geprüft: 3 Minuten Lesezeit

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

Wichtig

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.

Falsche Treffer

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

Tipp

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.

Anrufen Website prüfen Anfragen

Darstellung

Diese Einstellungen gelten nur auf diesem Gerät und werden lokal in deinem Browser gespeichert. Es wird nichts übertragen.

Farbschema
Schriftgröße
Lesbarkeit
Erklärung zur Barrierefreiheit