Security Hardener
Basic hardening: secure headers, enumeration blocking, generic login errors, IP-based rate limiting, and optional restriction of the REST API.
Plugin info
Maintenance & Compatibility
Maintenance score
Actively maintained • Last updated 58 days ago
Is Security Hardener abandoned?
Likely maintained (last update 58 days ago).
Compatibility
Developers
Languages
Similar & Alternatives
Explore plugins with similar tags, and compare key metrics like downloads, ratings, updates, support, and WP/PHP compatibility.
Description
Security Hardener is inspired by the official WordPress hardening guide (Advanced Administration / Security / Hardening). It uses the platform’s standard functions and does not override core. Applies a prudent set of defenses:
- Security headers:
X-Frame-Options,X-Content-Type-Options,Referrer-Policy,Permissions-Policy,COOP/CORP. - HSTS (optional; HTTPS only).
- Basic nonce-based CSP (optional; requires testing).
- Disable XML-RPC and pingbacks (optional; enabled by default).
- Hide the WordPress version in the
. - Block user enumeration via
/?author=by returning 404. - Generic login errors (prevents information leakage).
- IP-based login rate limiting with transients (configurable threshold and window).
- Restrict the REST API to authenticated users, with a minimal allowlist for oEmbed/index.
⚠️ Important: The restrict REST API option and CSP can affect integrations and plugins. Test it in staging first.
Privacy: the plugin does not send data to external services or create new tables. It only uses transients to count failed login attempts.
Installation
- Go to Plugins > Add New Plugin.
- Search for Security Hardener.
- Install and activate the Security Hardener plugin.
Frequently Asked Questions
No. By default it allows the index and the oEmbed namespace for basic compatibility. The rest requires an authenticated user. If you need additional public routes, do not enable the restriction or create specific solutions in your theme/plugin (with their permission_callback).
By default, rate limiting takes the IP from REMOTE_ADDR. If you use a trusted proxy (CDN/load balancer), define in wp-config.php:
define(‘WPH_TRUST_PROXY’, true);
With that, the plugin will try to use HTTP_CF_CONNECTING_IP or X-Forwarded-For (first element), validating the IP.
X-Frame-Options: SAMEORIGIN, X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin, Permissions-Policy: geolocation=(), microphone=(), camera=(), Cross-Origin-Opener-Policy: same-origin, Cross-Origin-Resource-Policy: same-origin, and optionally Strict-Transport-Security and Content-Security-Policy (with nonce).
Yes. uninstall.php deletes the main option and the rate-limit transients.
Review feed
Screenshots
Changelog
[0.3] – 2025-10-20
- Some corrections.
[0.2] – 2025-10-13
- Some corrections.
[0.1] – 2025-10-04
- Initial release.