WordPress Heartbeat, Pings, xmlrpc

1. Heartbeat API

Was ist das?

JavaScript-basiertes Polling-System. Schickt regelmässig AJAX-Requests vom Browser an /wp-admin/admin-ajax.php.

Wozu gut?

  • Autosave – Entwürfe alle ~60s automatisch speichern
  • Post-Locking – verhindert gleichzeitiges Bearbeiten durch mehrere User
  • Session-Ablauf – meldet User ab wenn Login-Session ausläuft
  • Plugin-Hooks – Plugins können eigene Daten mitsenden (WooCommerce, Yoast etc.)

Standard-Intervalle

ContextInterval
Post-Editor15s
Dashboard60s
Frontenddeaktiviert (ausser Plugins aktivieren es)

Problem

Auf schwachen VPS / Shared Hosting spürbar

Konstante Serverlast – auch ohne aktive Arbeit

Plugins wie WooCommerce/Yoast hängen sich rein und schicken Zusatzdaten

Legacy-Status

Nicht legacy – wird aktiv genutzt, aber oft unnötig aggressiv konfiguriert.

Best Practice

PHP
// Interval erhöhen (empfohlen: 60s)
add_filter('heartbeat_settings', function($settings) {
    $settings['interval'] = 60;
    return $settings;
});

// Autosave deaktivieren
add_filter('heartbeat_settings', function($settings) {
    $settings['autostart'] = false;
    return $settings;
});

// Komplett deaktivieren (verlierst Autosave + Post-Locking)
add_filter('heartbeat_disable', '__return_true');

Empfehlung: Interval auf 60s setzen. Komplett deaktivieren nur bei Einzelbetrieb ohne Redakteure.

2. Pingbacks, Trackbacks & Ping-Dienste

Was ist das?

Automatische Benachrichtigungssysteme aus der Blog-Ära (~2003).

FeatureFunktion
PingbackWP benachrichtigt verlinkte Blogs automatisch
TrackbackÄltere, manuelle Variante von Pingback
Ping-DiensteWP meldet neue Posts an Dienste wie rpc.pingomatic.com

Wozu gut?

Ursprünglich: gegenseitige Verlinkung und Sichtbarkeit in der Blogosphäre.

Problem

  • Kaum noch genutzt oder ausgewertet
  • Missbrauch als DDoS-Vektor (XML-RPC Pingback-Amplification)
  • Erzeugt ausgehende Requests bei jedem Publish
  • Einfallstor für Spam-Kommentare

Legacy-Status

Vollständig legacy. Kein sinnvoller Einsatz auf Standard-KMU-Sites.

Best Practice

PHP
// Pingbacks deaktivieren (für neue Posts)
add_filter('pre_option_default_ping_status', '__return_zero');
add_filter('pre_option_default_pingback_flag', '__return_zero');

// Selbst-Pingbacks verhindern
add_action('pre_ping', function(&$links) {
    $home = home_url();
    foreach ($links as $key => $link) {
        if (str_starts_with($link, $home)) {
            unset($links[$key]);
        }
    }
});

// Ping-Dienste deaktivieren
add_filter('privacy_ping_filter', '__return_false');

Alternativ in Einstellungen → Schreiben: Feld «Aktualisierungsdienste» leeren.

Empfehlung: Alles deaktivieren. Kein Verlust für Standard-Sites.

3. XML-RPC

Was ist das?

Remote-Protokoll über xmlrpc.php – erlaubt externen Apps, mit WP zu kommunizieren ohne Browser-Login.

Wozu gut?

Use CaseHeute relevant?
WordPress Mobile AppJa – aber kaum genutzt
JetpackJa – zwingend erforderlich
Desktop-Blogging-Tools (MarsEdit, WLW)Nein – tot
IFTTT / ZapierNein – nutzen heute REST API
Drittanbieter-Poster-ToolsNein – meist auf REST umgestellt

Problem

  • Brute-Force-Ziel – ein Request kann tausende Login-Versuche bündeln (system.multicall)
  • DDoS-Amplification via Pingback-Mechanismus
  • Läuft standardmässig aktiv, auch wenn niemand es braucht
  • PHP-Stack wird bei jedem Angriff mitgestartet

Legacy-Status

Weitgehend legacy. Nur noch relevant wenn Jetpack oder WP Mobile App aktiv genutzt wird.

Best Practice

PHP-Ebene (blockiert, Datei bleibt bestehen):

PHP
add_filter('xmlrpc_enabled', '__return_false');

Nginx-Ebene (bevorzugt – PHP wird gar nicht gestartet):

PHP
location = /xmlrpc.php {
    deny all;
}

Empfehlung: Auf Nginx-Ebene blocken. Besser als PHP-Filter, da kein Prozess gestartet wird.

Zusammenfassung

FeatureLegacy?Deaktivieren?Methode
HeartbeatNeinInterval erhöhenPHP-Filter
Pingbacks/TrackbacksJaJaPHP-Filter + WP-Einstellungen
Ping-DiensteJaJaPHP-Filter oder WP-Einstellungen
XML-RPCWeitgehendJa (ausser Jetpack)Nginx deny all