WordPress Security
WordPress compromises concentrate in plugins, credentials and writable directories. What to fix, in the order that removes the most risk.
Cyber Security Space editorial desk · Published 11 Jul 2026 · Updated 26 Aug 2026 · 2 min read · Reviewed 26 Aug 2026
Short answer
WordPress sites are rarely breached through WordPress core. The recurring causes are vulnerable or abandoned plugins and themes, administrator credentials without multi-factor authentication, and a web root where uploaded files can execute — so hardening should start there rather than with a security plugin.
Key takeaways
- Plugin and theme surface area is the dominant risk; removing unused extensions is a security control.
- Multi-factor authentication on every administrator is the single highest-value change.
- Preventing PHP execution in the uploads directory blocks a very common persistence route.
- A security plugin monitors — it does not substitute for patching and access control.
Where do WordPress compromises come from?
| Entry point | Typical scenario | Control that closes it |
|---|---|---|
| Vulnerable plugin | A form or gallery plugin two years out of date | Patch cadence and removal of unused plugins |
| Abandoned theme | A commercial theme with a bundled outdated library | Replace with a maintained theme |
| Credential reuse | An administrator password reused elsewhere and leaked | MFA plus unique credentials |
| Writable uploads | A PHP file uploaded through a media endpoint and executed | Block PHP execution in uploads |
| Supplier access | A former agency account still active | Access reviews at every handover |
What should you harden first?
STEP 01
MFA on all administrators
Then reduce the number of administrator accounts to those who need it.
STEP 02
Patch and prune
Update everything on a schedule and delete plugins and themes you do not use.
STEP 03
Block execution in uploads
Deny PHP execution in wp-content/uploads at the web server level.
STEP 04
Disable file editing
Set DISALLOW_FILE_EDIT so the dashboard cannot be used to write code.
STEP 05
Off-site backups
Not writable from the web server, and restore-tested.
STEP 06
Integrity monitoring
Alert on changes to core, theme and plugin files outside deploy windows.
# Deny PHP execution inside the uploads directory (Apache)
<Directory /var/www/html/wp-content/uploads>
<FilesMatch "\.ph(p[0-9]?|tml)$">
Require all denied
</FilesMatch>
</Directory>How do you verify a WordPress site is clean?
- Compare core, theme and plugin files against official releases rather than trusting a scan verdict.
- List administrators and check for accounts created outside your onboarding process.
- Review scheduled events for tasks that recreate files.
- Check indexed page counts and run a crawler-view diff on key templates.
Frequently asked questions
- Is WordPress inherently insecure?
- No. Core receives prompt security releases. Risk comes from the extension ecosystem and from operational practice, both of which the site owner controls.
- Do I need a security plugin?
- A good one adds useful monitoring and login protection. It does not replace patching, MFA and least-privilege file permissions, and it cannot detect everything stored in the database.
Sources
- Hardening WordPress — WordPressSupports: Official hardening recommendations including file editing and permissions.
Read next
Website Security
SEO Spam: The Complete PictureThe pillar page for injected search spam: the attack family, how the variants relate, and the detection and remediation path shared by all of them.
SEO Spam
Japanese Keyword HackAn SEO spam attack that injects Japanese-language pages into a compromised site to hijack search listings. How it works, how to confirm it, and how to clean up.
Website Security
How to Check if a Website Is HackedEight checks that reliably separate a compromised site from a slow or misconfigured one, in the order that finds problems fastest.
Website Security
Website Security ChecklistA prioritised checklist covering access, patching, backups, monitoring and response — ordered by how much risk each control removes.