Blog · Guides

Choosing and Updating Plugins Without Getting Owned

Ask anyone who cleans up hacked WordPress sites for a living where the breach usually starts, and the answer is almost never WordPress core. It is a plugin: an abandoned one with a known flaw, a poorly coded one with a sloppy permissions check, or a pirated one with a backdoor baked in on purpose. Core gets patched fast and audited constantly. The plugin directory is a much bigger, much messier surface, and attackers know it.

None of this means you should run a bare-bones site out of fear. It means you need a system: how you choose plugins, how you keep them updated, and how you stay honest about what is actually installed. Get that system right and you close off the most common way sites get owned.

Why Plugins Are the Weak Link

A plugin runs with the same privileges as the rest of your WordPress install. If it has a vulnerability, an attacker does not need your password, they just need a request that the plugin fails to sanitize or authenticate properly. Common failure patterns include unauthenticated access to admin functions, SQL injection through unescaped inputs, and arbitrary file upload endpoints left open by mistake. None of that requires WordPress itself to have a bug.

The risk compounds with every plugin you add, especially ones that are rarely updated, have a tiny user base, or duplicate functionality you already have elsewhere. Fewer, well-maintained plugins beat a pile of niche ones every time.

Vetting a Plugin Before You Install It

Before you click install, spend two minutes checking the plugin’s page in the WordPress.org directory (or wherever it is distributed):

  • Active installs and rating. A plugin with a healthy install base and steady ratings has more eyes on it, and problems tend to surface faster.
  • Last updated date. If it has not been touched in a long time relative to the current WordPress release, treat that as a warning sign, not a neutral fact. Abandoned plugins are the single most common source of long-lived vulnerabilities.
  • Support forum activity. Are the developers responding to bug reports and security concerns, or is the forum a graveyard of unanswered questions?
  • Tested up to version. This tells you whether the developer is actively testing against current WordPress releases, including the PHP versions people are actually running (PHP 8.1 through 8.3 is the mainstream range right now).
  • What it actually needs access to. A contact form plugin that wants broad filesystem or database access beyond its stated job is worth a second look.

For anything handling payments, user data, or site-wide functionality, it is worth a quick search for the plugin name plus “vulnerability” before you commit. If something turned up in the past, check whether it was patched promptly and whether the same team is still maintaining the plugin.

The Update Strategy That Balances Speed and Safety

There are two ways to get burned by plugin updates: waiting too long to patch a known vulnerability, or auto-updating into a release that breaks your site. The fix is not choosing one extreme, it is separating plugins by risk tolerance.

  • Security-critical, low-complexity plugins (simple utilities, well-established plugins with a long track record) are reasonable candidates for automatic updates.
  • Plugins central to your site’s core function (page builders, ecommerce, membership systems) deserve a staging check before the update reaches production, even if that check only takes a few minutes.
  • Anything flagged with a known security issue should be updated immediately regardless of your normal schedule. A patched vulnerability that is public knowledge is a race between you and anyone scanning for it.

A practical cadence for most sites: check for updates weekly, apply security-relevant ones right away, and batch the rest on a set day so you are not making ad hoc changes to a live site every time a changelog appears.

Using wp-cli to Manage Plugins Efficiently

wp-cli turns plugin management from a click-through chore into something you can script and audit. A few commands worth knowing:

wp plugin list --update=available
wp plugin update --all
wp plugin update contact-form-7
wp plugin deactivate old-unused-plugin
wp plugin delete old-unused-plugin

Two commands deserve special attention for security. wp core verify-checksums compares your WordPress core files against the official checksums to catch unauthorized modifications. wp plugin verify-checksums <plugin> does the same for plugins hosted on WordPress.org, comparing your installed files against what the developer actually published. Run it after an install or update if you want confidence that nothing has been tampered with:

wp plugin verify-checksums contact-form-7

If the plugin does not have published checksums, or if you got it from somewhere other than the official directory, this check will not work, which brings up the next point.

The Case Against Nulled Plugins

Nulled or pirated versions of premium plugins circulate widely, promising the full paid feature set for free. The trade-off is almost never worth it. To strip out license checks, whoever cracked the plugin had to modify its code, and there is no way to verify what else changed in the process. Malware researchers regularly find backdoors, hidden admin accounts, and file upload endpoints stitched into nulled plugins, sometimes activating only after the site has built up some traffic and search ranking to exploit.

There is also no update path. You are stuck on whatever version you downloaded, missing every security patch that follows, and you cannot run a checksum comparison against a legitimate source because there is no legitimate source. If a premium plugin is out of budget, look for a comparable plugin with a genuine free tier instead. It is a better trade than an unverifiable binary with root-level access to your site.

Ongoing Hygiene: Auditing What’s Installed

Plugins accumulate. A theme demo plugin, a testing tool you forgot about, a redirect plugin replaced by something else six months ago, they all sit there as dead weight and attack surface. Every few months, run wp plugin list and ask honestly whether each one is still earning its place. Deactivated plugins are not neutral, since their files are still on disk and still a target; delete what you do not use rather than just switching it off.

Pair this with the standard hardening basics: strong unique passwords with two-factor authentication, limiting login attempts, disabling XML-RPC if you do not use it, setting DISALLOW_FILE_EDIT so plugin and theme files cannot be edited from the dashboard, giving users the least privilege their role actually requires, and keeping tested off-site backups. None of this is exotic. It is the boring, consistent stuff that keeps most sites out of trouble, and plugin discipline is a core part of it. If you run on a managed host, some of this vulnerability monitoring and malware scanning may already happen behind the scenes (ServerBorn does this for sites on our stack), but the choices about what you install and how fast you patch it are still yours to make.

Takeaway

Plugins are where most WordPress compromises begin because they are the biggest, least uniform part of the codebase. Vet before you install, separate your update schedule by risk, use wp-cli’s checksum tools to verify what is actually on disk, and skip nulled plugins entirely. None of this eliminates risk, but it removes the easiest paths in, which is most of what security work actually accomplishes.