WP Manifestindependent plugin directory
manifest / security / rh-hardening

RH Hardening WP Registry grade A-. Low-severity findings · 1 findingWP RegistryLow-severity findings · 1 findingOpen the reportA-

Security-Hardening für WordPress: User-Enumeration blocken, Feeds aus, Security-Header, WP-Schmodder und XML-RPC raus.

★ 0stars
61release downloads
≈10active sites
v0.8.5latest · 19d ago

Install

Download rh-hardening.zip From the v0.8.5 release on GitHub, Oct 6, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/herbeckrobin/rh-hardening/releases/download/v0.8.5/rh-hardening.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

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/users und ?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-Options und HSTS (nur über HTTPS), plus Entfernen von X-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:

  1. 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.
  2. Warten und die Website benutzen. Formulare abschicken, Shop-Seiten öffnen, alles anfassen, was Besucher auch anfassen. Was nie aufgerufen wird, taucht auch nicht auf.
  3. 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.
  4. 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+.

Releases

8 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v0.8.5 latest
Oct 6, 2026 19d ago
rh-hardening.zip
8
Sep 23, 2026 1mo ago
rh-hardening.zip
6
Sep 23, 2026 1mo ago
rh-hardening.zip
3
Aug 17, 2026 2mo ago
rh-hardening.zip
15
Aug 10, 2026 2mo ago
rh-hardening.zip
5
Aug 8, 2026 2mo ago
rh-hardening.zip
5
Jun 17, 2026 4mo ago
rh-hardening.zip
16
Jun 17, 2026 4mo ago
rh-hardening.zip
3

Active-site estimate ≈10 comes from the median of recent superseded releases. Method.

A- grade

Security

RH Hardening 0.8.5 · audited by WP Registry

Low-severity findings only.

1 low
Audited release
0.8.5
Findings
1
Worst severity
low
Content hash
052d5b9a5ffa041dc75ac110…

Findings

  • low Shield guest blocks accept a forged login cookie

    auth_bypass

    An unauthenticated visitor can send any cookie whose name starts with wordpress_logged_in_ (the value is ignored). rhhard_shield_has_auth_cookie() then returns true, and namespace_guest rules are skipped (call site around lines 64-75). The default rules are /batch/v1, /wp/v2/users, and /wp-site-health/v1. That only disables the mu-plugin layer: RestGate::guard() still runs on rest_pre_dispatch and calls is_user_logged_in(), which rejects the same prefixes for a real guest while the REST gate is in its default standard mode, and Hardening::blockRestUserEndpoints() still unsets the users routes. Param rules (author__not_in and author_exclude) do not consult the cookie and still run. The spoof matters only as a hole in the early wall, including when an administrator has turned the later REST gate off and is relying on the shield alone.

    inc/Shield/template.php:375-383

    Recommendation

    Do not treat a cookie name as a session. Defer the guest check until pluggable.php is loaded (init before REST dispatch is early enough) and call wp_validate_auth_cookie(), or keep blocking namespace_guest prefixes for every request that has not passed a real authentication check, the same way RestGate does.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.