TopSyde
Free malware scannerGet your free site auditStart Risk-Free

Do Deactivated WordPress Plugins Pose a Security Risk?

Deactivated WordPress plugins still sit on disk and still answer HTTP requests. Here is what that costs, which ones to delete, and how to clean them up safely.

Colton Joseph

Colton Joseph

Founder & Lead Developer

··12 min read

Last updated: September 27, 2026

WordPress plugins screen showing several deactivated plugins still installed on a client website

Yes. A deactivated plugin still has every one of its PHP files sitting in wp-content/plugins, and a good number of those files run when a browser requests them directly, whether WordPress loaded the plugin or not. Deactivating stops WordPress from calling the code. It does nothing to stop the internet from reaching it.

Do deactivated WordPress plugins pose a security risk?

They do, for three reasons that have nothing to do with the WordPress admin screen. The files are still present. Many plugin files execute on their own without loading WordPress first. And the vulnerability database does not care what your plugins page says, because automated scanners read your server, not your settings.

When you click Deactivate, WordPress removes the plugin from the active_plugins option. That is it. The folder stays, the PHP stays, and so do the old JavaScript, the sample data, and the bundled libraries from 2019 that nobody has patched since.

Plenty of plugins ship files that bootstrap themselves: AJAX handlers, file upload endpoints, cron scripts, CSV importers, bundled third-party libraries like TimThumb or old versions of PHPMailer. Request one of those URLs and PHP runs it. WordPress never gets consulted about whether the plugin is active.

This is why the same vulnerability disclosure that forces every active install to patch also applies to a plugin you turned off eight months ago and forgot about.

How attackers find a plugin you turned off

They guess the folder name. WordPress plugin slugs are public and predictable, so a scanner walks a list of the 5,000 most common ones and requests a file it knows exists in each. If the server returns 200 instead of 404, the plugin is on disk.

The cheapest fingerprint is readme.txt, which sits in the root of almost every plugin from the official directory and includes a "Stable tag" line with the version number. That one request tells a bot which plugin you have and which release, which is enough to match against a public CVE list. We wrote about why plugin readme.txt files leak version data and what you can do about it; that same leak works identically on inactive plugins.

After the fingerprint comes the exploit attempt, and this is the part people underestimate. A large share of plugin vulnerabilities are reachable through a direct file request or an admin-ajax.php action that the plugin registered. The direct-file ones work on deactivated plugins. Arbitrary file upload bugs in old file manager and slider plugins have been exploited this way for years, long after site owners believed they had "turned the plugin off."

According to Patchstack's State of WordPress Security report, 7,966 new WordPress vulnerabilities were disclosed in 2024, and roughly 96% of those were in plugins (2025). That is not a number you can outrun by deactivating things. Every unpatched copy on disk is one more entry in that pile that happens to be sitting on your server.

Themes are the same problem with worse habits

Nobody audits themes. A site running a custom child theme usually has the parent, plus Twenty Twenty-One, plus whatever premium theme the previous developer bought in 2020 and never removed. Those folders take uploads, contain functions.php, and are a favorite hiding place for reinfection payloads because cleanup tools focus on plugins and core.

If a site keeps getting hit after a cleanup, the leftover theme folder is one of the first places to look. We covered that pattern in detail in why a WordPress site gets hacked again a week after cleanup.

What a dormant plugin costs when it gets hit

The plugin itself costs nothing. The cleanup, the downtime, and the client conversation are where the money goes, and they cost the same whether the breach came through a plugin you rely on or one you forgot to delete.

Emergency malware cleanups are commonly quoted in the $200-$500 range per site for a single incident, and that is before the Google Safe Browsing warning, the reindexing wait, and the hours you spend on the phone. Sucuri's Website Threat Research Report found that a backdoor was present in a majority of the compromised sites they cleaned, which is the mechanism that turns one incident into three (2023).

Run the math for an agency. Forty client sites, an average of three dormant plugins each, and you are maintaining 120 unpatched packages that generate zero value. One breach a year at $400 for cleanup plus six billable hours at $125 is $1,150 before you count the client who starts shopping for a new agency without telling you. Our breakdown of what a WordPress security breach actually costs a business puts real figures on the parts that do not show up on an invoice, and downtime pricing per minute covers the rest.

Risk sourcePresent when deactivated?Typical exploit pathFix
Plugin PHP files on diskYesDirect request to a standalone scriptDelete the folder
Known CVE in that versionYesPublic exploit matched by version fingerprintDelete or update, then delete
readme.txt version disclosureYesScanner fingerprint, then targeted attackDelete the plugin
Abandoned parent or old themeYesfunctions.php backdoor, uploader bugDelete unused themes
mu-plugins directoryAlways activeRuns regardless of the plugins screenAudit manually
Plugin settings in the databaseYes, harmless aloneNone directlyClean on deletion if offered

Delete or keep: how to decide in 30 seconds

Delete anything you are not using this month. Keep a full backup instead of keeping the folder. The only plugins worth leaving installed and inactive are the ones you toggle on and off as part of a working routine, and even those should be current.

The reason people hesitate is settings. They think deleting the plugin throws away the configuration. Usually it does not: most plugins leave their options rows in wp_options and their custom tables intact unless you explicitly enable a "remove all data on uninstall" setting. Reinstall later and the settings are often still there.

Cases where keeping an inactive plugin is defensible:

  • A seasonal tool you turn on four times a year, like a Black Friday pricing plugin or a holiday banner. Keep it, but update it on the same schedule as everything else.
  • A debug or migration utility used during releases, such as Query Monitor or WP Migrate. Keep it current, or better, install it on staging only.
  • A licensed plugin you are mid-renewal on. Keep the folder, but confirm the version is patched before it sits there for a quarter.

Everything else goes: the theme you tried for a week, the caching plugin you replaced, the form builder from two redesigns ago, the "coming soon" plugin from launch day. If you need a structured pass across a whole portfolio, our WordPress plugin audit process walks through the inventory step first, which is where most agencies discover how much is installed.

How to delete a plugin without breaking the site

Back up, delete from the admin screen rather than over FTP, then check the front end and one key template. Deleting through the WordPress dashboard runs the plugin's uninstall routine, which cleans up more than dragging the folder to the trash over SFTP does.

The order that keeps you out of trouble:

  1. Take a full backup, files and database, and confirm you can restore it. A backup you have never tested is a hope, not a plan.
  2. Do the deletion on staging first if the site earns money. Our guide to WordPress staging environments covers the workflow.
  3. Delete from Plugins > Installed Plugins so the uninstall hook fires.
  4. Check for orphaned shortcodes. A deleted plugin leaves its shortcode text sitting in post content, visible as [some_shortcode] on the page. Search the content table before you delete, not after.
  5. Verify the folder is gone on disk. Some hosts with aggressive file permissions fail the delete and report success anyway.
  6. Clear caches at every layer, including the CDN.

One exception worth knowing: files in wp-content/mu-plugins load on every request no matter what, and they never appear with an activate or deactivate toggle. If something was dropped there by a previous host or a previous developer, the plugins screen will not tell you. Look at that folder by hand.

Why plugin hygiene stops happening on its own

Nobody forgets on purpose. It stops happening because the task has no deadline, no client is asking for it, and the sites keep loading fine for months while the risk accumulates. Then the site gets defaced on a Saturday and suddenly it is urgent.

This is the same maintenance gap that makes managed WordPress hosting worth the extra cost for most agencies and business owners. The work is not hard, but it is recurring, unglamorous, and the first thing to fall off a busy week.

On TopSyde, file-level scanning runs against the whole tree, not just the plugins WordPress reports as active. TopSyde Sentinel compares what is on disk against known-good plugin and theme releases every day and flags files that should not be there, including modified files inside folders that have been inactive for a year. That is the class of problem signature-only scanners tend to miss, which we covered in how AI-generated WordPress malware evades traditional scanners. Remediation is reversible, so a false positive does not take your site down.

We also keep a running inventory of what is installed across every site in an account, which is how dormant plugins get caught before they become an incident rather than after. Agencies managing a portfolio can see how that fits a multi-client workflow on our agency hosting page, and the technical specifics of the platform live on the spec sheet.

Getting the cleanup done

If you have a site or twenty with plugins nobody has touched since a previous developer left, the fastest path is to let someone else do the inventory. Migration to TopSyde includes a full file audit, and plans start at $89/mo per site with a 30-day money-back guarantee. Support is staffed by people who work on WordPress, with responses under 2 hours during business hours, and monitoring runs 24/7 in the background.

Start with pricing and plan details, or read through the case studies if you want to see how the migration process runs before you commit. If you would rather handle it in-house, delete the plugins you are not using this week. That one pass removes more attack surface than most security plugins add protection.

Frequently Asked Questions

Does deactivating a WordPress plugin stop it from running?

It stops WordPress from loading the plugin during a normal page request. It does not stop a browser or a bot from requesting a PHP file inside that plugin's folder directly, and many plugin files execute on their own when called that way. The code is still on the server and still reachable.

Should I delete plugins I might use again later?

Delete them. Most plugins leave their settings in the database when removed, so reinstalling later usually restores your configuration, and you have a full backup either way. Keeping an unpatched folder on disk for a plugin you might use in six months is a poor trade.

Do deactivated plugins still receive automatic updates?

WordPress can auto-update inactive plugins if auto-updates are enabled for them, but many site owners never turn that on, and premium plugins with expired licenses stop receiving updates entirely. That is how a deactivated plugin ends up sitting at a version with a published exploit for a year or more.

Are unused themes as risky as unused plugins?

Yes, and they get audited far less often. Unused themes contain functions.php and often bundled libraries, they are reachable by direct file request the same way plugins are, and they are a frequent place for a backdoor to survive a malware cleanup. Keep your active theme, its parent if you use one, and one default theme as a fallback.

How do I know if a dormant plugin was already exploited?

Look for files with recent modification dates inside folders you have not touched, unexpected admin users, and outbound spam or SEO injections in your page source. A server-side scan that compares every file against the official release is more reliable than a plugin-based scanner running inside the same WordPress install that may already be compromised.

Colton Joseph
Colton Joseph

Founder & Lead Developer

20+ years full-stack development, WordPress, AI tools & agents

Colton is the founder of TopSyde with 20+ years of full-stack development experience spanning WordPress, cloud infrastructure, and AI-powered tooling. He specializes in performance optimization, server architecture, and building AI agents for automated site management.

Related Articles

View all →

Free malware scanner

Check your site for signs of malware.

Paste your URL to check for injected scripts, suspicious redirects and cloaked content. See your results without signing up or entering an email. This checks public pages; it cannot rule out backdoors in your server files or database.

Free public-page scan. No signup; results on screen and by email.