Zum Inhalt springen
Kontakt

Sebastian Nawrot
Dorneystr. 45
44149 Dortmund

Webentwicklung & Technik

WordPress-Sicherheit: Admin & Kommentare

Sichere deine WordPress-Website mit diesen Code-Snippets: Admin-URL verschieben, Kommentare deaktivieren und Security-Tipps für mehr Schutz.

Sebastian Nawrot
6 Min. Lesezeit
#WordPress#Sicherheit#PHP#Security#Codeschnipsel#Code-Snippets

WordPress ist das weltweit am häufigsten genutzte CMS - und genau das macht es zu einem beliebten Ziel für Hacker. Die Standard-Login-URL /wp-admin kennt jeder Angreifer, und ungenutzte Kommentarfunktionen bieten zusätzliche Angriffsflächen. In diesem Artikel zeige ich dir zwei essenzielle Code-Snippets, um deine WordPress-Installation deutlich sicherer zu machen.

Warum WordPress-Sicherheit so wichtig ist

Täglich werden tausende WordPress-Websites angegriffen. Die häufigsten Angriffsvektoren:

  • Brute-Force-Attacken auf /wp-admin
  • Spam über Kommentarfunktionen
  • SQL-Injection über Formulare
  • Veraltete Plugins mit bekannten Sicherheitslücken

Die gute Nachricht: Mit ein paar Zeilen Code in der functions.php kannst du deine Website deutlich besser schützen.

1. Admin-URL verschieben (Security by Obscurity)

Die Standard-Login-URL /wp-admin ist ein offenes Tor für Bots und automatisierte Angriffe. Indem du diese URL auf etwas Individuelles änderst, reduzierst du die Anzahl der Login-Versuche massiv.

Der Codeschnipsel

Füge folgenden Code in deine functions.php ein:

<?php
/**
 * WordPress Admin-URL ändern
 *
 * Verschiebt /wp-admin auf eine custom URL für mehr Sicherheit
 * WICHTIG: Merke dir die neue URL gut!
 */

// Definiere deine neue Admin-URL (z.B. /geheim-admin/)
define('CUSTOM_ADMIN_URL', 'geheim-admin');

// Blockiere direkten Zugriff auf /wp-admin
add_action('init', 'custom_admin_url_redirect');
function custom_admin_url_redirect() {
    // Nur bei direktem Aufruf von wp-admin
    if (strpos($_SERVER['REQUEST_URI'], '/wp-admin') !== false
        && strpos($_SERVER['REQUEST_URI'], 'admin-ajax.php') === false) {

        // Prüfe ob custom URL im Request ist
        if (strpos($_SERVER['REQUEST_URI'], CUSTOM_ADMIN_URL) === false) {
            // Leite zur Startseite weiter (404 wäre zu auffällig)
            wp_redirect(home_url());
            exit;
        }
    }
}

// Neue Login-URL aktivieren
add_action('login_init', 'custom_login_url');
function custom_login_url() {
    if (isset($_GET['action']) && $_GET['action'] === CUSTOM_ADMIN_URL) {
        // Erlaubt den Login über die custom URL
        return;
    }

    // Block standard wp-login.php
    if (strpos($_SERVER['REQUEST_URI'], 'wp-login.php') !== false) {
        if (!isset($_GET['action']) || $_GET['action'] !== CUSTOM_ADMIN_URL) {
            wp_redirect(home_url());
            exit;
        }
    }
}

// Leite wp-login.php auf custom URL um
add_filter('login_url', 'custom_login_page_url', 10, 3);
function custom_login_page_url($login_url, $redirect, $force_reauth) {
    $login_url = home_url('/' . CUSTOM_ADMIN_URL . '/');

    if (!empty($redirect)) {
        $login_url = add_query_arg('redirect_to', urlencode($redirect), $login_url);
    }

    if ($force_reauth) {
        $login_url = add_query_arg('reauth', '1', $login_url);
    }

    return $login_url;
}

So funktioniert's

  1. Custom URL definieren: Ändere 'geheim-admin' auf deine gewünschte URL
  2. Neue Login-URL: Statt /wp-admin nutzt du jetzt https://deine-website.de/geheim-admin/
  3. Blockierung: Direkter Zugriff auf /wp-admin und /wp-login.php wird zur Startseite umgeleitet
  4. AJAX-Ausnahme: Admin-AJAX funktioniert weiterhin (wichtig für Plugins!)

Alternative: Plugin-Lösung

Falls dir die Code-Lösung zu technisch ist, gibt es auch Plugins:

  • WPS Hide Login (kostenlos, schlank, zuverlässig)
  • iThemes Security (umfangreiches Security-Plugin mit Login-URL-Feature)

Meine Empfehlung: Code-Snippet in der functions.php ist performanter als ein Plugin und gibt dir volle Kontrolle.

2. Kommentare komplett deaktivieren

Wenn du keine Kommentare auf deiner Website brauchst, solltest du sie komplett deaktivieren. Ungenutzte Kommentarfunktionen sind Angriffsflächen für:

  • Spam-Bots
  • XSS-Attacken
  • SQL-Injection
  • Phishing-Links

Der Codeschnipsel

Füge folgenden Code in deine functions.php ein:

<?php
/**
 * WordPress Kommentare komplett deaktivieren
 *
 * Entfernt Kommentare aus Admin, Frontend und Datenbank-Queries
 */

// 1. Kommentare & Trackbacks für alle Post-Types deaktivieren
add_action('admin_init', 'disable_comments_post_types_support');
function disable_comments_post_types_support() {
    $post_types = get_post_types();

    foreach ($post_types as $post_type) {
        if (post_type_supports($post_type, 'comments')) {
            remove_post_type_support($post_type, 'comments');
            remove_post_type_support($post_type, 'trackbacks');
        }
    }
}

// 2. Schließe Kommentare für bestehende Posts
add_filter('comments_open', '__return_false', 20, 2);
add_filter('pings_open', '__return_false', 20, 2);

// 3. Verstecke Kommentare im Admin-Menü
add_action('admin_menu', 'disable_comments_admin_menu');
function disable_comments_admin_menu() {
    remove_menu_page('edit-comments.php');
}

// 4. Entferne Kommentare aus der Admin-Bar
add_action('init', 'disable_comments_admin_bar');
function disable_comments_admin_bar() {
    if (is_admin_bar_showing()) {
        remove_action('admin_bar_menu', 'wp_admin_bar_comments_menu', 60);
    }
}

// 5. Redirect von Kommentar-Seiten im Admin
add_action('admin_init', 'disable_comments_admin_redirect');
function disable_comments_admin_redirect() {
    global $pagenow;

    if ($pagenow === 'edit-comments.php' || $pagenow === 'options-discussion.php') {
        wp_redirect(admin_url());
        exit;
    }
}

// 6. Entferne Kommentar-Support aus Dashboard-Widgets
add_action('wp_dashboard_setup', 'disable_comments_dashboard');
function disable_comments_dashboard() {
    remove_meta_box('dashboard_recent_comments', 'dashboard', 'normal');
}

// 7. Entferne Kommentare aus RSS-Feeds
add_filter('comment_feed_links', '__return_empty_array');

// 8. Entferne Kommentar-Anzahl aus Admin-Columns
add_filter('manage_posts_columns', 'disable_comments_columns');
add_filter('manage_pages_columns', 'disable_comments_columns');
function disable_comments_columns($columns) {
    unset($columns['comments']);
    return $columns;
}

// 9. Blockiere Kommentar-Formulare im Frontend (falls Theme hardcoded)
add_filter('comments_template', 'disable_comments_template', 20);
function disable_comments_template() {
    return dirname(__FILE__) . '/comments-disabled.php';
}

// 10. Entferne Kommentar-Reply-Script (Performance-Boost!)
add_action('wp_enqueue_scripts', 'disable_comments_reply_script');
function disable_comments_reply_script() {
    wp_deregister_script('comment-reply');
}

Erstelle zusätzlich eine leere Template-Datei

Erstelle im gleichen Verzeichnis wie deine functions.php eine Datei comments-disabled.php:

<?php
/**
 * Leeres Kommentar-Template
 *
 * Verhindert Anzeige von Kommentar-Formularen im Frontend
 */

// Nichts ausgeben - Kommentare sind deaktiviert
return;

Was dieser Code bewirkt

  1. Admin-Interface: Entfernt Kommentar-Menü und Widgets
  2. Frontend: Blockiert Kommentar-Formulare komplett
  3. Datenbank: Verhindert neue Kommentare
  4. Performance: Entfernt unnötige Scripts (comment-reply.js)
  5. RSS-Feeds: Keine Kommentar-Feeds mehr
  6. Dashboard: Keine Kommentar-Statistiken

Bestehende Kommentare löschen (Optional)

Falls du bereits Kommentare in der Datenbank hast:

-- VORSICHT: Backup erstellen vor Ausführung!
-- Löscht ALLE Kommentare unwiderruflich

-- In phpMyAdmin oder via WP-CLI ausführen:
DELETE FROM wp_comments;
DELETE FROM wp_commentmeta;

Oder via WP-CLI (sicherer):

wp comment delete $(wp comment list --format=ids) --force

3. Bonus: Weitere Sicherheits-Tipps

.htaccess-Schutz für wp-config.php

# wp-config.php schützen
<files wp-config.php>
    order allow,deny
    deny from all
</files>

Login-Versuche limitieren (Code-Snippet)

<?php
/**
 * Login-Versuche limitieren (einfache Variante)
 */

add_action('wp_login_failed', 'login_failed_limit');
function login_failed_limit($username) {
    $ip = $_SERVER['REMOTE_ADDR'];
    $key = 'login_attempts_' . md5($ip);

    $attempts = get_transient($key) ?: 0;
    $attempts++;

    set_transient($key, $attempts, 15 * MINUTE_IN_SECONDS);

    if ($attempts >= 5) {
        wp_die('Zu viele fehlgeschlagene Login-Versuche. Bitte warten Sie 15 Minuten.');
    }
}

XML-RPC deaktivieren (DDoS-Prävention)

<?php
// XML-RPC komplett deaktivieren
add_filter('xmlrpc_enabled', '__return_false');

// Oder in .htaccess:
// <Files xmlrpc.php>
//   order deny,allow
//   deny from all
// </Files>

Checkliste: WordPress-Sicherheit

  • Admin-URL geändert (siehe Code oben)
  • Kommentare deaktiviert (falls nicht benötigt)
  • WordPress, Themes & Plugins aktuell halten
  • Starke Passwörter nutzen (min. 16 Zeichen)
  • 2-Faktor-Authentifizierung aktivieren
  • SSL/HTTPS aktiviert
  • Regelmäßige Backups
  • Security-Plugin installieren (z.B. Wordfence, iThemes Security)
  • File-Permissions korrekt setzen (644 für Dateien, 755 für Ordner)
  • wp-config.php in .htaccess schützen
  • XML-RPC deaktivieren
  • Standard-Admin-User "admin" umbenennen

Performance-Tipp: functions.php auslagern

Bei vielen Code-Snippets wird die functions.php schnell unübersichtlich. Mein Tipp:

<?php
// In functions.php
require_once get_template_directory() . '/inc/security.php';
require_once get_template_directory() . '/inc/comments.php';

Erstelle einen /inc/-Ordner im Theme und lagere die Snippets in separate Dateien aus:

  • security.php - Alle Security-Funktionen
  • comments.php - Kommentar-Deaktivierung
  • performance.php - Performance-Optimierungen

Fazit: Weniger Code, mehr Sicherheit

Mit diesen beiden Code-Snippets hast du zwei der häufigsten Angriffsvektoren eliminiert:

  1. Admin-URL ändern: Reduziert Brute-Force-Versuche um 90%+
  2. Kommentare deaktivieren: Null Spam, null XSS-Risiko

Wichtig: Security by Obscurity (Admin-URL ändern) ist keine alleinige Lösung, sondern Teil einer mehrschichtigen Sicherheitsstrategie. Kombiniere diese Maßnahmen mit:

  • Regelmäßigen Updates
  • Starken Passwörtern
  • 2FA
  • Security-Plugin
  • Regelmäßigen Backups

Weitere Ressourcen

Hast du Fragen zu den Code-Snippets oder weitere Sicherheits-Themen, die ich behandeln soll? Schreib mir gerne!


Hinweis: Teste alle Code-Änderungen zuerst auf einer Staging-Umgebung. Erstelle vor jeder Änderung an der functions.php ein Backup deiner Website!

Möchtest du auch so einen Blog?

Ich entwickle moderne, SEO-optimierte Websites und Blogs mit Next.js, React und Tailwind CSS.