WordPress Hardening Checklist
Check WordPress security items: login, updates, permissions and more.
WordPress powers more than 40% of all websites, which makes it the first target for automated bot attacks. Run it with default settings and you are exposed to brute-force logins, vulnerable-plugin exploitation, user enumeration and XML-RPC amplification out of the box. This checklist gathers the highest-impact hardening steps — from login security to file permissions, exposure reduction, backups and HTTPS — in one place.
As you tick each item, a readiness score (%) is computed in real time and shown as an OK / caution / risk status. Everything runs in your browser; your input and checkbox state are never sent anywhere. Use it before launching a new site or during a periodic security audit.
Login security
Core, plugin & theme updates
Files & permissions
Minimize exposure
Backups & HTTPS
Why WordPress hardening matters
Most WordPress compromises start not with a zero-day but with neglected defaults and outdated plugins. Attackers brute-force /wp-login.php, harvest usernames via/wp-json/wp/v2/users, and scan for plugins with known vulnerabilities. Hardening is about shrinking that automated attack surface.
Core measures, in priority order
- Login security: two-factor auth (2FA), login attempt limits and strong passwords give the best return.
- Updates: keep core, plugins and themes current, and delete anything you no longer use.
- File protection: block access to
wp-config.phpand setDISALLOW_FILE_EDITto disable in-dashboard code editing. - Reduce exposure: hide version info, block unused
XML-RPC, and stop REST API user enumeration. - Be ready to recover: automated backups and end-to-end HTTPS decisively limit damage when something goes wrong. Verify your response carries the right headers with the security headers check, and tighten your content policy with the CSP generator.
Permission baseline
As a rule of thumb, set directories to 755, files to 644, andwp-config.php to 640 or 600. Minimize directories the web server can write to, and never use 777.