Direct answer: a useful WordPress security hardening checklist reduces avoidable risk across identities, software, configuration, files, APIs, monitoring and recovery. Start with an owned inventory, keep supported components current, minimise privileges, require protected connections, use revocable integration credentials, detect meaningful changes and prove that recovery works. Hardening is a continuing operating practice, not a plugin or a promise that a site is “100% secure.”
This checklist owns site-level implementation and verification. It does not replace provider due diligence, plugin lifecycle governance, release testing or backup design. Use the linked specialist guides when those decisions need deeper evidence.
Set the security boundary and accountable owners
Document who owns each layer: hosting platform, WordPress core, themes, plugins, custom code, user access, DNS, CDN, email, integrations, logs and recovery. “Managed hosting” does not automatically transfer every application responsibility. Confirm the boundary in service documentation, then assign a named internal owner for anything outside it.
For each control, record the expected state, evidence, review frequency and escalation route. The NIST Cybersecurity Framework 2.0 groups cybersecurity outcomes into Govern, Identify, Protect, Detect, Respond and Recover. That lifecycle is a useful guard against treating prevention as the whole security programme.
Inventory every privileged route and component
List WordPress core, active and inactive themes, standard and must-use plugins, custom code, runtime versions, database, scheduled jobs, administrator accounts, application passwords, deployment keys, hosting panel, registrar, DNS, CDN, email delivery, backup service, analytics, tag manager and external APIs. For each item, capture its purpose, owner, version or configuration source, data handled and credential used.
WordPress Site Health can contribute environment information, but it is not a complete business or access inventory. Reconcile its output with hosting and deployment records after every material change. Give extensions their own approval and retirement process using the WordPress plugin governance policy; use the hosting selection checklist for provider-level controls and service boundaries.
Keep supported software current without losing control
The official WordPress security guidance identifies current core, plugin and theme software as a foundational control. Include PHP, the database engine, web server and any edge or deployment software in the same lifecycle. Remove components that no longer have a purpose; merely deactivating unused code can leave it installed and forgotten.
Classify an update by exposure and impact, read release information, take a usable recovery point, test material changes in a protected environment and verify the real user journeys after deployment. WordPress lets administrators enable automatic updates per plugin and theme, but the setting is only a delivery choice. Someone still needs to review failures, confirm the resulting version and test the site. Coordinate higher-risk changes through a controlled WordPress staging workflow.
Reduce account privilege and login risk
- Give each person an individual account rather than sharing a permanent administrator login.
- Assign the lowest role and capabilities needed for the task; review elevated access on a schedule and after supplier or staff changes.
- Use long, unique passwords stored in an approved password manager and enable multi-factor authentication for privileged systems where supported.
- Protect hosting, registrar, DNS, email and backup accounts as carefully as WordPress because each can affect the site or its recovery.
- Keep any emergency account controlled, monitored and tested, with its use generating a review.
WordPress’s users guidance applies the principle of least privilege through roles and capabilities. Do not rely on a renamed login URL, a non-default administrator username or a hidden menu as the primary access control. These measures may reduce noise, but they do not replace authentication, authorisation and monitoring.
Protect the full authenticated session
Use HTTPS for the entire site, especially every authenticated request, not only the login page. WordPress recommends HTTPS for logins and visitors, while OWASP’s session guidance explains why an exposed session identifier can let an attacker impersonate a user.
Rate-limit abusive authentication attempts at an appropriate layer, protect password-reset and email-change journeys, re-authenticate where a sensitive action warrants it, and invalidate sessions after a suspected compromise. Use secure cookie settings supported by the platform. Do not place session identifiers in URLs or record raw passwords, tokens or session IDs in logs.
Use separate, revocable credentials for integrations
WordPress Application Passwords are per-user, per-application credentials for programmatic access. They are individually revocable and intended to avoid sharing a person’s main password. Create one for each integration, use HTTPS, attach it to a user with only the needed capabilities, label the purpose and owner, review last use and revoke it when the connection ends or exposure is suspected.
For same-site REST API requests, WordPress normally uses authenticated cookies and a REST nonce to help prevent cross-site request forgery. A nonce is not authorisation. Custom routes should define a permission callback and check the exact capability required, commonly with current_user_can(). Do not disable the whole REST API without testing dependencies; WordPress administration and plugins may rely on it.
Harden files, configuration and secrets
Use the least file and directory permissions that let the application operate. Ownership and write requirements vary by host and deployment model, so confirm them instead of blindly applying recursive permission commands. The WordPress file-permissions guide cautions that most users should not change permissions without understanding the environment.
Protect wp-config.php from public access, keep production secrets out of repositories, tickets and shared documents, and rotate any secret that may have been exposed. Where the deployment model supports controlled code releases, add define( 'DISALLOW_FILE_EDIT', true ); to prevent dashboard editing of plugin and theme files. WordPress notes that this can reduce one post-compromise path, but it does not stop every malicious upload or change.
Keep detailed error display off on the public production site. WordPress’s debugging guidance distinguishes logging from public display and warns that debug tools are not recommended on live sites. Send useful errors to a protected log with limited access and an appropriate retention period. Test configuration changes on staging, keep a rollback and verify REST, AJAX, media, scheduled tasks and forms afterwards.
Constrain write paths and untrusted input
Limit who can upload files or embed custom HTML, validate custom upload handlers, and prevent uploaded content from becoming executable where the platform allows. Review form, media, import and integration endpoints that accept data from visitors or third parties. A web application firewall can add a filtering layer, but it cannot compensate for vulnerable code, excessive privileges or missing updates.
Do not keep publicly downloadable backups, database exports, debug files or configuration copies inside the web root. Treat tag-manager containers and injected scripts as part of the application surface: they can execute code or transmit visitor data without installing a WordPress plugin.
Monitor signals that lead to a defined action
| Signal | Evidence to retain | Immediate question |
|---|---|---|
| New administrator, role change or application password | Actor, time, source and approved request | Was this authorised, and should access remain active? |
| Core, theme, plugin or executable-file change | Version, deployment record and file diff | Was it an expected release or an unauthorised modification? |
| Burst of login, reset or authorisation failures | Time range, account, result and protected source context | Is an account under attack, and are valid users affected? |
| Unexpected API or outbound request | Route, integration identity, destination and result | Which approved business process explains it? |
| Availability, malware or integrity alert | First detection, affected assets and response steps | What must be isolated, preserved or restored now? |
OWASP’s logging guidance recommends capturing security-relevant authentication, authorisation, configuration and application events while excluding credentials and other secrets. Synchronise clocks, restrict log access, define retention and give every alert an owner, severity and response procedure. An alert that nobody can interpret or act on is not an effective control.
Prepare incident decisions and verified recovery
Before an incident, name who can isolate the site, preserve evidence, contact providers, rotate credentials, approve restoration and manage required communications. Keep current contact routes outside the affected system. During recovery, identify and address the entry point; restoring the vulnerable plugin, stolen credential or hostile scheduled task can recreate the compromise.
Maintain protected database and file recovery points and test restoration in an isolated non-production environment. The separate WordPress backup and restore testing guide owns backup scope, retention and restore evidence. Use qualified security, legal and privacy advice for a real breach or regulatory decision rather than treating a generic checklist as an incident conclusion.
Use an evidence-based hardening gate
| Control area | Minimum evidence | Pass condition |
|---|---|---|
| Asset and owner inventory | Dated component, service and integration register | No unknown privileged route or ownerless critical component |
| Identity | User, role, MFA and integration-credential review | Access is individual, necessary and revocable |
| Software | Supported-version report and update results | No unexplained exposed or abandoned component |
| Configuration | TLS, file, secret, debug and API checks | Expected state verified after change |
| Detection | Test alert and retained event record | Named owner receives and can interpret the signal |
| Recovery | Recent isolated restore test and decision log | Site and essential journeys recover within the approved plan |
Repeat the gate after a migration, major release, authentication change, new integration or incident—not only on an annual calendar date. Record exceptions with an owner, risk, compensating control and review date rather than silently accepting them.
Avoid controls that create false confidence
- A security plugin is one component, not a complete programme or a guarantee.
- Renaming the login URL may reduce automated noise but does not replace access control.
- Disabling APIs broadly can break legitimate functions while leaving other attack paths open.
- A clean automated scan is evidence from one method and moment, not proof of no vulnerability.
- A certification badge or hosting label does not prove that this site is correctly configured.
- Publishing detailed debug output or secrets to diagnose a problem can create a new exposure.
Custom authentication, payments, membership data, file processing and high-value integrations may justify specialist code review or penetration testing. Define the scope and rules of engagement; do not test third-party systems without permission.
For a controlled remediation or security-aware WordPress rebuild, review PAKWM’s website design and development service. To discuss scope, request a quote without placing passwords, private keys or other secrets in the form.
Sources
- WordPress Advanced Administration Handbook: Security
- WordPress Advanced Administration Handbook: Hardening WordPress
- WordPress Advanced Administration Handbook: HTTPS
- WordPress Advanced Administration Handbook: File Permissions
- WordPress Plugin Handbook: Users and Least Privilege
- WordPress Advanced Administration Handbook: Application Passwords
- WordPress REST API Handbook: Authentication
- WordPress REST API Handbook: Adding Custom Endpoints
- WordPress Documentation: Plugin and Theme Auto-updates
- WordPress Documentation: Site Health Screen
- WordPress Advanced Administration Handbook: Debugging in WordPress
- OWASP Authentication Cheat Sheet
- OWASP Session Management Cheat Sheet
- OWASP Logging Cheat Sheet
- NIST Cybersecurity Framework 2.0