RH Hardening releasesself-updates
Security-Hardening für WordPress: User-Enumeration blocken, Feeds aus, Security-Header, WP-Schmodder und XML-RPC raus.
by Robin Herbeck · github.com/herbeckrobin/rh-hardening · website
Install
The author publishes release zips, so WP-CLI can install straight from GitHub:
wp plugin install https://github.com/herbeckrobin/rh-hardening/releases/download/v0.8.2/rh-hardening.zipShips its own WordPress updater (Plugin Update Checker), so new versions show up under Dashboard → Updates.
Readme
RH Hardening
Security-Baseline für jede produktive WordPress-Site. Teil der rh-blueprint Kollektion.
Bündelt die Härtungs-Maßnahmen, die sonst in jeder functions.php wieder von Hand landen, als ein- und ausschaltbare Bausteine. Alle Maßnahmen sind per Default an, weil sie der Standard für eine Live-Site sind.
Was es macht
- User-Enumeration blocken: sperrt
/wp-json/wp/v2/usersund?author=N//author/<slug>/für nicht eingeloggte Besucher, damit Login-Namen nicht auslesbar sind (Brute-Force-Schutz). - Feeds deaktivieren: RSS/Atom-Feeds liefern 404, sinnvoll bei Sites ohne Blog.
- Security-Header:
X-Content-Type-Options,Referrer-Policy,Permissions-Policy,X-Frame-Optionsund HSTS (nur über HTTPS), plus Entfernen vonX-Powered-By. Fallback, falls der Server die Header nicht selbst setzt. - WP-Schmodder entfernen: Generator-Tag, WLW-Manifest, RSD-Link, Shortlink, Feed-Links und das Emoji-Script raus dem
<head>. - XML-RPC deaktivieren: schließt einen häufigen Brute-Force- und Pingback-Vektor.
- Content-Security-Policy: sagt dem Browser, aus welchen Quellen er laden darf. Der einzige Header, der Cross-Site-Scripting wirklich stoppt.
Die Hook-Reihenfolge ist bewusst gewählt: ?author= läuft auf parse_request (vor dem Canonical-Redirect, der den Namen sonst leakt), Feeds auf template_redirect.
Die Policy einführen
Eine Content-Security-Policy lässt sich nicht am Schreibtisch schreiben. Wer sie blind scharf schaltet, sperrt zuverlässig die halbe Website aus, weil jedes Formular-Plugin und jede eingebundene Schriftart eine eigene Quelle mitbringt. Deshalb drei Stufen und ein Weg dazwischen:
- Einschalten. Der Schalter setzt den beobachtenden Modus und startet die Sammlung für drei Tage. An der Website ändert sich nichts, der Browser meldet nur, was die Regeln blockiert hätten.
- Warten und die Website benutzen. Formulare abschicken, Shop-Seiten öffnen, alles anfassen, was Besucher auch anfassen. Was nie aufgerufen wird, taucht auch nicht auf.
- Vorschlag ansehen. Hinter dem Zahnrad steht, was gesammelt wurde, und die daraus gebauten Regeln. Das ist der Ist-Zustand, nicht der Soll-Zustand: eine fremde Quelle in dieser Liste kann genauso gut der Einbruch sein, den die Policy verhindern soll. Prüfen, dann übernehmen.
- Scharf schalten. Erst jetzt.
Die Sammlung schaltet sich nach drei Tagen von allein ab, und mit ihr verschwindet der Meldeweg. Ein dauerhaft offener Endpunkt, den jeder beschreiben kann, wäre genau die Angriffsfläche, die dieses Modul sonst wegnimmt.
Gespeichert wird nur, welche Regel welche Quelle wie oft betraf. Keine Adressparameter, keine Verweisquelle, keine Herkunft der Besucher. Damit braucht die Sammlung keinen Eintrag in der Datenschutzerklärung.
Einstellungen
Im Backend unter RH Blueprint → Sicherheit. Jede der fünf Maßnahmen ist einzeln abschaltbar, falls ein Baustein bewusst nicht gewünscht ist.
Installation
ZIP unter Plugins → Plugin hochladen installieren und aktivieren. Der geteilte Core ist gebündelt, keine weitere Installation nötig.
Voraussetzungen
WordPress 6.5+, PHP 8.1+.
Read the full README on GitHub →
Releases
| Tag | Published | Asset | Downloads |
|---|---|---|---|
| v0.8.2 | Aug 17, 2026 | rh-hardening.zip | 8 |
| v0.8.0 | Aug 10, 2026 | rh-hardening.zip | 5 |
| v0.7.0 | Aug 8, 2026 | rh-hardening.zip | 4 |
| v0.1.2 | Jun 17, 2026 | rh-hardening.zip | 16 |
| v0.1.1 | Jun 17, 2026 | rh-hardening.zip | 3 |
Active-site estimate ≈10 comes from the median of recent superseded releases. Method.