WordPress security is ongoing risk reduction across the host, application, extensions, accounts, content, and recovery process. Installing one security plugin does not transfer responsibility for the rest of the system. A useful checklist names each control, owner, test, and fallback.
Safety note: test configuration changes in an appropriate staging environment and keep a verified rollback. File permissions, server rules, and database privileges vary by host; copying commands without understanding the environment can break the site.
1. Define the responsibility boundary
Document what the host manages and what the site owner manages. Ask about operating-system and runtime updates, isolation, TLS, backups, malware response, logs, web application firewall controls, support access, and recovery. Then assign ownership for WordPress core, themes, plugins, accounts, content, DNS, domain registration, analytics, and forms.
The official WordPress hardening handbook describes security as risk reduction rather than perfect protection and emphasizes limiting access, containment, preparation, trusted sources, updates, backups, and monitoring.
2. Make recovery the first control
- Back up the database, uploads, required application files, and environment-specific configuration.
- Store protected copies outside the same writable account or server.
- Document encryption keys, retention, ownership, and restore order.
- Test a restore into an isolated environment and verify pages, media, users, forms, and business workflows.
- Keep enough history to recover from a compromise discovered after the most recent backup.
3. Keep the supported software set small
Update WordPress core, active themes, and active plugins through a controlled routine. Review release notes and compatibility for business-critical changes, back up first, test where warranted, deploy, and verify. Delete unused themes and plugins instead of merely deactivating them.
Maintain an extension register with purpose, owner, source, license, data access, capabilities, update status, support contact, and replacement plan. The plugin buy-versus-build framework helps evaluate lifecycle ownership before adding another dependency.
4. Protect administrator identities
- Use unique named accounts for people and separate service accounts for integrations.
- Require strong unique passwords and multifactor authentication for privileged users.
- Grant the least capabilities needed and avoid routine work from an administrator account.
- Remove dormant users, stale sessions, former vendors, and emergency access that is no longer justified.
- Review password-reset email, owner accounts, hosting access, SFTP/SSH, database tools, DNS, and registrar access together.
Use the existing WordPress roles and capabilities audit to test sensitive actions directly rather than trusting a role label.
5. Use trusted sources and minimize plugin authority
Obtain WordPress releases from official sources and extensions from the WordPress repository or established publishers. Before installation, review update history, support status, compatibility, requested permissions, data flows, external services, deletion behavior, and the vendor's security contact. Avoid nulled or repackaged themes and plugins.
A plugin that can upload files, execute code, create administrators, export personal data, change orders, or call external services deserves deeper review. Disable built-in file editing where it fits the operating model, but do not treat that setting as a complete defense.
6. Secure transport, files, and secrets
- Use HTTPS for the public site and administration.
- Use SFTP or SSH rather than unencrypted FTP.
- Keep configuration and secrets out of public downloads and source distributions.
- Apply the least write access needed by the host and deployment method.
- Protect backups, exports, debug logs, and temporary archives from public access.
- Rotate credentials after exposure or staff/vendor transitions.
7. Reduce unnecessary exposure
Disable services and application features the site does not use, but verify dependencies before blocking endpoints. Rate limiting, bot controls, a web application firewall, and protected administrative access can reduce abuse when correctly configured. Security through obscurity, such as changing a login URL alone, is not a primary control.
8. Log changes that matter
| Event | Minimum question | Response owner |
|---|---|---|
| Administrator or role change | Who granted what authority and why? | Site owner |
| Plugin/theme/core change | Was it expected, approved, and verified? | Technical owner |
| Repeated login or reset activity | Is an account being targeted or recovered? | Security/IT owner |
| File or DNS change | Does it match a release or approved operation? | Technical owner |
| Form or export access | Was sensitive data accessed appropriately? | Data owner |
Send critical alerts to a destination independent of the website and test delivery. Logs must have a defined retention period; unlimited logging can create cost and privacy risk without improving detection.
9. Prepare for compromise before it happens
- Identify the incident lead, host contact, developer, insurer, legal contact, and communications owner.
- Document how to place the site in a safe state without destroying evidence.
- Preserve logs, timestamps, affected files, account activity, and provider notices.
- Rebuild from known-good sources when integrity cannot be established.
- Reset affected credentials and review connected systems, not only WordPress.
- Validate content, users, redirects, DNS, search visibility, forms, and payment flows before reopening.
Place the site within the broader small-business cybersecurity baseline. Website security depends on email, identity, devices, vendors, and recovery controls that WordPress itself cannot provide.