Black Friday Black FridayUp to 85% off all WP Ghost plans.48 months from $49, or pay once for lifetime. SHOP NOW

WordPress Security

Usernames leak in three places banner

How to Stop WordPress User Enumeration

Type example.com/?author=1 into your address bar. If WordPress redirects you to a page with a username in the URL, you just enumerated your own admin.

That’s user enumeration. It hands attackers half of every login, so they only have to guess the password.

Where usernames leak

There are three common routes. The ?author=1 redirect works by counting through user IDs. The REST API lists authors at /wp-json/wp/v2/users. And the author archive pages, like /author/yourname/, print the login name right in the address.

Login error messages leak too. “The password you entered for the username admin is incorrect” confirms that “admin” exists.

Block the ?author= scan

Add this rule to .htaccess above the WordPress block. It sends the scan to the home page.

RewriteCond %{QUERY_STRING} ^author=([0-9]*)
RewriteRule .* /? [L,R=301]

Test it afterwards by loading /?author=1 again. You should land on your home page, not an author URL.

Close the REST API route

Anonymous visitors shouldn’t be able to list users. The steps are in the guide to restricting the WordPress REST API, which covers both a code snippet and a path change.

Change the author path

Public author archives put the login name in the URL. WP Ghost can change that path and swap the ID, and the author path guide has the steps.

The sitemap author listing leaks names too.

Make the display name different from the login

Go to Users, edit your profile and pick a display name that isn’t your login. Then change any admin account still named “admin” to something else. Create a new administrator, move the content over and delete the old one.

Stop the login form giving hints

Return one generic message for every failed login. A filter on login_errors that returns “Login failed.” does it.

Then turn on two-factor authentication.

Check your work

Run the three tests again. /?author=1, /wp-json/wp/v2/users and /author/yourname/ should all fail to show a login name. Do it in a private window so you see what a stranger sees.

FAQ

Is user enumeration dangerous?

On its own it breaks nothing. It makes password attacks cheaper, because the attacker already has the username.

Can I protect a multi-author blog?

Yes. Show author display names, and keep the login name out of URLs and the API.

How can I see enumeration attempts?

Look for requests to /?author= with rising numbers in your access logs.

What your REST API tells strangers banner

How to Restrict the WordPress REST API

Visit example.com/wp-json/wp/v2/users in a private browser window. On many sites you get a list of usernames, no login needed.

The WordPress REST API is on by default, and it answers anyone who asks. Parts of it are needed. Parts of it just give strangers a free look at how your site is built.

What the REST API shows a stranger

Two endpoints do most of the damage. /wp-json/wp/v2/users can list your authors and their usernames. /wp-json/ itself lists the plugins that register routes, which tells a scanner what you run.

That’s a head start for anyone planning a password attack or picking an exploit.

Don’t switch it off completely

The block editor uses the REST API. So do many plugins, contact forms and page builders. Turn it off for everyone and your editor stops saving.

The safer move is to restrict it for people who aren’t logged in.

Restrict it for logged-out visitors

Add this to your theme’s functions.php or a small custom plugin. It returns an error for anyone who isn’t signed in.

add_filter('rest_authentication_errors', function ($result) {
    if (!empty($result)) {
        return $result;
    }
    if (!is_user_logged_in()) {
        return new WP_Error('rest_forbidden', 'Not allowed.', array('status' => 401));
    }
    return $result;
});

Some public features break with this. A headless front end, a contact form that posts to the API, or an app reading your posts will all need a login or an exception. Test your forms right after you add it.

Change the API path instead

Another option is to move /wp-json/ to a path of your own, so scanners that look for the default find a 404. WP Ghost does this, and the steps are in the guide to changing the REST API path.

I’d ship the path change first on a public site, because it breaks fewer features than blocking logged-out access. The login restriction is stricter and fits sites with no public API use.

Check the result

Open /wp-json/wp/v2/users again in a private window. You want a 401, a 403 or a 404, not a list of names. Then open the editor and save a draft to confirm it still works.

Also look at the author path and ID settings, since author archives leak the same usernames by another route.

FAQ

Is the REST API a security risk?

It lists usernames and routes to anyone by default. Restricting it for logged-out visitors closes most of that.

Can I disable it without breaking Gutenberg?

Not fully, since the editor needs it. Restrict logged-out access or change the path instead.

Will changing the path break plugins?

Plugins that use WordPress functions follow the new path. Test forms and integrations that have the old one typed in.

How do I see if my users are exposed?

Visit /wp-json/wp/v2/users while logged out. Usernames in the response mean they’re exposed.

Is XML-RPC still open? banner

How to Disable XML-RPC in WordPress

Open example.com/xmlrpc.php in a browser. If you see the text “XML-RPC server accepts POST requests only”, the file is live and answering strangers.

That file is a leftover from the days before the REST API. Mobile apps and remote publishing tools used it to talk to WordPress. Most sites today use none of that, and the file still sits there with its doors open.

Why attackers like xmlrpc.php

The file accepts login attempts. One request can carry many username and password guesses through a method called system.multicall, so a bot tries hundreds of passwords in a single hit. Your login page never sees most of it.

It also supports pingbacks. Those can be abused to make your site send traffic to a target, which is how a small blog ends up helping in someone else’s attack.

Check whether you need it

Plugins that connect your site to WordPress.com can still use xmlrpc.php for that link.

Test on a staging copy if a plugin connects your site to WordPress.com or you post from a remote publishing tool.

If you use none of those, turn it off. If you aren’t sure, turn it off on a staging copy first and see what breaks.

Disable it on Apache

Add this to the .htaccess file in your site root.

<Files xmlrpc.php>
  Require all denied
</Files>

On older Apache 2.2 servers the line is Order deny,allow followed by Deny from all. Requests now get a 403 before WordPress loads at all, which also saves server work.

Disable it on Nginx

Add this inside your server block, then reload Nginx.

location = /xmlrpc.php {
  deny all;
}

Disable it with WP Ghost

If you would rather not touch server files, WP Ghost has a setting for it. The steps are in the guide to disabling XML-RPC with WP Ghost. It’s one toggle, and it keeps working after a host migration, which a hand-edited .htaccess often doesn’t.

Check that it’s closed

Reload example.com/xmlrpc.php. You want a 403 or a 404. Then run the Website Security Check, and test again after your next host move.

Bots can still guess passwords at your login page. Add brute force protection, and see the complete hack prevention guide for the next steps.

FAQ

Will disabling XML-RPC break my site?

Only if a plugin or app still uses it. Test on a staging copy if a plugin connects your site to WordPress.com or you post from a remote publishing tool.

Does the REST API replace XML-RPC?

For almost everything, yes. XML-RPC stays for backward compatibility.

Can I just rename xmlrpc.php?

Updates can put the file back. A server rule that denies the request holds up better.

How do I spot an attack on xmlrpc.php?

Look in your access logs for repeated POST requests to /xmlrpc.php from a few addresses.

Card showing a forged request from a second tab rejected without a nonce

WordPress CSRF Protection: How Nonces, SameSite, and Referer Checks Stop Forged Requests

CSRF (cross-site request forgery) makes a logged-in admin’s browser send a request they did not intend. It sits in the OWASP Top 10 under Broken Access Control (A01), and its CWE number is 352.

How the attack runs

  1. You’re logged into your WordPress admin.
  2. In another tab, you open a page the attacker controls, from a link, an ad or a compromised site.
  3. That page sends a hidden request to your site: a form submission, an image request or a script call.
  4. Your browser attaches your session cookie. Your site treats the forged request as yours and acts on it.

Forged-request flaws keep turning up in WordPress plugins. Some were in two-factor setup code.

Three controls that stop a forged request

ControlHow it worksLimit
NoncesA short-lived token tied to one action and one user. The server checks it with wp_verify_nonce() or check_admin_referer() before acting. An attacker’s page can’t create a valid oneOnly protects handlers that check it. Core checks its own. Plugins and custom code have to do it themselves
SameSite cookiesWith Lax or Strict, the browser doesn’t send your session cookie on cross-site POST requests, which is the main route CSRF usesDoesn’t fix a handler that never verifies a token
Referer checkingcheck_admin_referer() confirms the request came from your own siteReferer headers can be stripped, so it can’t stand alone

Verify the nonce on every request that changes state in custom endpoints.

How to harden your site against CSRF

  1. Set SameSite on your cookies. Use at least SameSite=Lax for session and authentication cookies. This lives in your security headers.
  2. Add the rest of your security headers. See our guide to website security headers.
  3. Add a content security policy. It limits what an injected page can do.
  4. Audit nonces in your custom code. Every handler that changes state should call wp_verify_nonce() or check_admin_referer().
  5. Make admin endpoints less predictable. CSRF payloads target default WordPress paths. If you change your wp-admin URL, canned payloads can’t find their target.

What it does and doesn’t cover

WP Ghost reduces the attack surface around login and admin. It does not replace nonce checks.

DoesDoesn’t
Rejects forged requests, even from a real admin’s browserFix a plugin that ships without nonce checks. That flaw stays until the plugin is patched

Keep plugins updated and pick ones that verify requests. The complete hack prevention guide shows how this fits with other defenses.

FAQ

Does WordPress have built-in CSRF protection?

Partly. Core provides nonces, and custom code has to check them.

Will SameSite cookies break my logins or my site?

Not with SameSite=Lax, the recommended default.

Can a firewall stop CSRF attacks?

Only partly. A forged request can look like a normal logged-in one.

How is CSRF different from XSS?

CSRF tricks a victim’s browser into sending a forged request to your site.

A ghost mascot standing before three website-technology detector screens that all return a blank result, illustrating how anti-fingerprinting hides WordPress from Wappalyzer, BuiltWith, and CMS scanners.

How to Hide WordPress from Detectors: Beat Wappalyzer, BuiltWith & CMS Scanners

Open a random site in your browser, click a detector extension, and it names the CMS, the theme, and half the plugin stack before the page finishes loading. Any visitor, or any attacker, can do the same to your site right now. Removing your footprint tag by tag helps, but detectors are built to beat exactly that. They read dozens of signals at once and need only one to confirm you.

This guide is about defeating the detectors specifically: the browser extensions, the online CMS scanners, and the technology-profiling databases that fingerprint WordPress. If you have already worked through general WordPress footprint removal, this is the next layer, which is making the tools that look for WordPress come back empty.

How WordPress detectors actually fingerprint you

Detectors do not see WordPress. They match patterns. Knowing which patterns they check is most of the work, because you cannot hide from a signal you do not know you are sending. Technology profilers like Wappalyzer and BuiltWith, plus CMS scanners like WhatCMS and the security-focused WPScan, look at:

  1. HTML fingerprints. The generator meta tag, //s.w.org and //api.w.org references, emoji and oEmbed scripts, and body classes such as page-id-*.
  2. Asset paths. Any /wp-content/, /wp-includes/, or theme and plugin directory in your source is a near-certain WordPress tell.
  3. HTTP headers. The Link header advertising the REST API (rel="https://api.w.org/"), the X-Pingback header, and default cache headers.
  4. Predictable URLs. /wp-json/, /wp-login.php, /readme.html, /xmlrpc.php, and /wp-admin/. A single 200 response confirms the platform.
  5. Cached and historical records. This is the one people miss. Profiling databases store what your site looked like the last time they crawled it, so they keep reporting WordPress long after you clean the live page.

You remove signals 1 to 4. Signal 5 you have to flush actively, which the last step covers. For a fuller catalogue of which tools check what, see the most popular WordPress theme detectors and how to hide from WordPress theme detectors.

Make detectors come back empty: The anti-fingerprinting steps

Work through these in order and re-test with a detector after each one. The goal is not fewer signals. It is zero confirming signals, because one is enough.

  1. Kill the version and generator tags. Remove the generator meta tag and strip ?ver= strings from CSS and JS so scanners cannot read your version. Details in how to hide the WordPress version and remove the generator meta tag.
  2. Rewrite /wp-content/ and /wp-includes/. These paths are the loudest structural fingerprint a profiler reads. Map them to neutral paths carefully, so references do not break, using custom WordPress paths.
  3. Remove the REST API discovery signal. Drop the Link header advertising api.w.org and restrict unauthenticated /wp-json/ responses that leak users and active plugins.
  4. Block the giveaway files and endpoints. Return 404s on readme.html, license.txt, wlwmanifest.xml, and the RSD endpoint, and remove the X-Pingback header.
  5. Change the login and admin paths. A custom login slug plus redirects on /wp-login.php and /wp-admin/ removes both a confirmation signal and the target of automated login attacks.
  6. Strip the small tells. Remove theme and plugin HTML comments, the emoji script, and s.w.org DNS-prefetch tags. These are the leftovers most people forget after doing the big items.
  7. Flush cached detection results. After the live page is clean, re-scan and, where the profiler allows, request a re-crawl so its stored record updates. This is the step that makes the database-backed detectors finally agree you are hidden.

“I hid everything, but BuiltWith still says WordPress”

This is the most common complaint, and it is almost always signal 5, the cached history. BuiltWith and similar profilers are databases, not live scanners. They report the last snapshot they took, so a site you cleaned yesterday can show WordPress for weeks until the record refreshes. The fix is not more hardening. It is forcing or waiting out the re-crawl. The detector-specific playbooks cover the exact process. Hide WordPress from BuiltWith walks through the cache-removal steps, and hide WordPress from Wappalyzer covers the extension that reads your live page in real time.

The detectors you won’t fully beat

Know the ceiling here. Some detection is behavioural rather than signature-based: response timing, the shape of a 404 page, how the site handles a malformed request, or JavaScript globals a script reads after the DOM loads. A determined analyst running a custom check can often still infer WordPress even when every standard signal is gone. Anti-fingerprinting defeats the automated, at-scale detection that feeds opportunistic attacks. It does not guarantee invisibility to a human who is specifically investigating you. Aim for scanners that give up, and accept that a focused person may still work it out.

Manual hardening vs. a managed approach

You can do every step above by hand. The problem is durability. A core update restores readme.html, a new plugin enqueues fresh versioned assets, and your cleaned headers reset. Miss one signal after any update and the detectors light up again. Anti-fingerprinting is only as good as its weakest un-refreshed moment.

A dedicated solution keeps the whole signal set suppressed and re-applies it after updates. Hide My WP Ghost bundles the anti-fingerprinting work. It hides the generator and DNS-prefetch tags, strips versions from image, CSS, and JS files, removes detector-readable HTML comments, rewrites wp-content and wp-includes, redirects the default login and admin paths, and handles the cached-detection cleanup for the profiling databases. Review the full list of security features to see each toggle, and confirm your result with how to know if your site is hidden from detectors.

The payoff: An empty scan

A clean detector result changes the economics of attacking you. Opportunistic bots pick targets by scanning for a known CMS and version, then firing the matching exploit. When Wappalyzer, BuiltWith, and the CMS scanners return nothing, or return a false or blank result, your site drops off those automated target lists. You are not invisible to a skilled human, but you have removed yourself from the volume game where most attacks actually happen. Start with the version and generator tags today, work down the seven steps, and then flush the caches so the databases agree.

Frequently asked questions

If I already removed my footprint, why do I still need detector evasion?

Footprint removal and detector evasion overlap, but they are not identical. Footprint removal cleans your live source. Detector evasion also handles the cached databases and the real-time extensions that re-check you. A site can have a clean footprint and still show WordPress in a profiler that has not re-crawled.

Will hiding from detectors break my site or hurt SEO?

No, when done correctly. Search engines index your content, not your CMS signature, so a blank detector result has no effect on rankings. The only real risk is careless path rewriting, so check that old URLs redirect and that you don’t create 404s.

Can Wappalyzer or BuiltWith still detect me after all this?

The live-page extension (Wappalyzer) should come back empty once every signal is gone. The database-backed profiler (BuiltWith) may lag until its cached record refreshes, which is expected and clears with a re-crawl rather than more hardening.

Is detector evasion the same as being secure?

No. It reduces your automated attack surface, which is real and valuable, but it never replaces updating plugins, running a firewall, and enforcing strong logins. Treat it as one layer, not the whole defense.

How do I verify I’m actually hidden?

Run the site through several detectors, a live extension, an online CMS scanner, and a profiling database, and confirm each returns no WordPress signature. Re-check after every major update, since a WordPress, theme or plugin update can bring the signals back.

WordPress Security Statistics 2025–2026: 43 Verified Data Points

Last updated: April 15, 2026

In 2025, 11,334 new WordPress vulnerabilities were recorded , a 42% increase year-on-year.

Approximately 13,000 WordPress sites are hacked per day.

The median time from vulnerability disclosure to mass exploitation is 5 hours.

87.8% of exploits bypass standard hosting defenses.

🆕 2026 update

Patchstack published its State of WordPress Security in 2026 whitepaper on February 25, 2026. The 5-hour exploitation window, the 87.8% hosting defense failure rate, and all Q1 2026 data are now included. Source: Patchstack 2026


01. Key WordPress security statistics at a glance

The four headline numbers from the 2025 and 2026 data:

Key WordPress security statistics: 13,000 sites hacked a day, 11,334 new vulnerabilities in 2025, 5 hours to mass exploitation, 87.8% of exploits bypass hosting defenses

Those four numbers tell most of the story.

But the details matter – because understanding why these numbers look the way they do is what actually leads to doing something about it.


02. How big is the WordPress attack problem?

WordPress runs 43.5% of all websites on the internet.[Hostinger, 2026]

Nearly half the web.

Which makes it the single most attractive target for cybercriminals – not because WordPress is uniquely insecure, but because attacking it at scale makes economic sense.

Build one scanner. Run it against the internet. Almost every other site is WordPress.

4.7 million WordPress sites hacked annually, roughly 13,000 per day

Most of those hacks are not targeted. Not personal. 

Automated bots scan millions of sites daily looking for recognizable patterns – a standard login page URL, an exposed version number in a meta tag, a plugin signature in the page source.

They’re not after you specifically.

They’re after anyone running a vulnerable, identifiable WordPress installation who hasn’t hidden it.

A new WooCommerce store with default settings still answers on the standard /wp-login.php path. Its WordPress version sits in a meta tag. A bot reads both, checks the version against a known vulnerability database and queues the site for automated exploitation. The owner never sees the scan. The first sign is often a Google Search Console warning.

That scenario plays out thousands of times per day. The sites aren’t interesting – they’re just visible.

One widely used WordPress security plugin blocks 55 million exploit attempts and over 6.4 billion brute force attacks every single month across its network. [TDW Digital, 2025]That is not a spike. That is the permanent baseline.


03. 11,334 vulnerabilities: Breaking down the 2025 numbers

Patchstack’s State of WordPress Security in 2026 – published February 25, 2026 – confirmed a record year for WordPress vulnerabilities. Not marginally above average. A record, by a substantial margin.

WordPress vulnerabilities per year: 5,943 in 2023, 7,966 in 2024, 11,334 in 2025

Three years. Vulnerabilities essentially doubled.

And Q1 2026 data is not reassuring – in the first week of January 2026 alone, 333 new vulnerabilities were disclosed, with 120 of them having no patch at the time they went public. [WebHostMost, Mar 2026]

The weekly average heading into 2026 is 250+ plugin vulnerabilities per week – 36 per day.

Where are all these vulnerabilities coming from?

Not the core. The WordPress core team has strict security review processes, and the numbers reflect it: only two core vulnerabilities were found in all of 2025. [Patchstack 2026]

The problem is the ecosystem around it:

Where WordPress vulnerabilities come from: plugins 91%, themes 9%, core under 1%

Plugins. Ninety-one percent. Every plugin installed on your site is a potential entry point, and the average WordPress installation runs between 20 and 30 of them.

Multiply that by millions of sites, and the scale of the exposure becomes clear.

🆕 2026 trend to watch

Patchstack calls out “vibe coding” – AI-generated plugins shipped by developers who can’t audit the code an LLM just wrote for them. When the person shipping the code can’t review it for security problems, vulnerabilities go live silently. This is accelerating, not stabilizing. Source: Patchstack 2026

The severity jump is also significant. Highly exploitable vulnerabilities – the ones attackers actively weaponize at mass scale – increased by 113% year-on-year in 2025.[The Repository / Patchstack, Mar 2026] 

More high-severity vulnerabilities were found in 2025 than in the previous two years combined.


04. The 5-hour problem: How fast are WordPress vulnerabilities exploited?

Here’s the number from Patchstack’s 2026 report that changes how you have to think about WordPress security:

“The weighted median time to first mass exploitation was five hours.”

Patchstack State of WordPress Security in 2026

Five hours.

From public disclosure to active mass exploitation – five hours.

This matters because the traditional advice (“keep your plugins updated”) assumes you have time to act. For heavily targeted vulnerabilities, you often don’t.

The exploitation timeline for heavily targeted vulnerabilities:

0–5h
Median first exploitation attempt. Automated scanners monitor vulnerability disclosure feeds and deploy exploit code within hours of a CVE going public. Patchstack 2026
20%
of top-targeted vulnerabilities are actively exploited within 6 hours of public disclosure. Patchstack 2026
45%
within 24 hours. By the time most site owners read about it in a newsletter, attacks have been running for a full day. Patchstack 2026
70%
within 7 days – roughly when most people get around to applying that update notification they’ve been ignoring. Patchstack 2026

And here’s what makes the 5-hour window even more dangerous: 

46% of vulnerabilities had no patch available at the time of public disclosure.[WP Edition / Patchstack, Feb 2026]

There is no update to apply. The vulnerability is public, documented, actively scanned for – and the plugin is still broken.

Why?

Because 52% of plugin developers do not patch before disclosure.[Patchstack via Xictron, 2026]

The researcher found the bug, reported it responsibly, waited, published – and the developer still hadn’t shipped a fix.

Patchstack says it plainly: “Regular plugin updates are the second line of defence, but as attackers weaponize new vulnerabilities within mere hours, this is not a viable defence.”


05. Where do hackers actually get into WordPress sites?

Attack types dominating 2025–2026

Attack types in 2025-2026: XSS, CSRF, SQL injection, broken access control and remote code execution

XSS dominates because it’s easy to introduce in plugin code and notoriously difficult to patch completely.

What makes 2025’s data particularly uncomfortable: 

57% of vulnerabilities in H1 2025 required no authentication whatsoever. [Patchstack Mid-Year 2025] 

No login needed. No password to steal. Just a vulnerable plugin, installed and active.

What do attackers leave behind on hacked WordPress sites?

A website security vendor’s data on what’s found on compromised WordPress sites: [Hostinger, 2026]

  • 72.7% contain active malware
  • 69.6% have unauthorized backdoors – persistent access the attacker can return to later
  • 46.7% have SEO spam injected – hidden keyword-stuffed content that triggers Google penalties
  • 8.1% have phishing pages embedded within them

The 2026 Patchstack and Monarx report adds an important shift: attackers are now injecting code into legitimate WordPress core, plugin, and theme files rather than dropping standalone malicious files. Traditional “scan and delete” malware removal misses this entirely. [The Repository, Mar 2026]

⚠️ The login page exposure

In 2023, Wordfence blocked over  100 billion credential stuffing attacks from 74 million unique IP addresses.  The vast majority targeted standard /wp-login.php and /wp-admin paths. 81% of hacked WordPress sites involved weak or stolen passwords as a contributing factor. If your login page is at the default URL, you’re absorbing every automated attack that knows where to look. Source: Sucuri and Wordfence via HowToWP


06. Why won’t my hosting provider protect me from WordPress attacks?

Managed WordPress hosting is expensive, comes with security messaging all over the pricing page, and those server-level firewalls are surely doing something? They are. Just not nearly enough.

Hosting-level defenses blocked only 26% of WordPress vulnerability attacks

The reason is structural.

Network and server firewalls were designed to block broad categories of malicious traffic – DDoS floods, port scans, known malicious IPs.

They were not designed to understand the application-specific semantics of a stored XSS vulnerability in version 3.4.1 of a specific WordPress plugin. That requires application-layer intelligence.

Patchstack’s 2026 conclusion: “In 2026, everybody needs deep visibility into what their websites are made of and put automated security measures in place to mitigate new security vulnerabilities in less than five hours.”

💡 The EU Cyber Resilience Act – coming September 2026

By September 2026, all plugin and theme developers distributing to EU users must have vulnerability disclosure programs in place by law. The question is whether it will meaningfully reduce the 52% non-patch-before-disclosure rate.  Source: Patchstack 2025 Whitepaper


07. What does a WordPress hack actually cost to fix?

People tend to underestimate this. A $100 malware removal service is only one line of the bill.

Cost of a WordPress hack: $613 average malware removal, $14,500 total recovery, 6-12 months to recover rankings, $8 a month for protection

The $14,500 figure includes malware removal, emergency developer time, downtime, lost revenue, and the months of SEO work required to undo injected spam links and Google manual penalties. Against $8/month for active protection, the math does not need a spreadsheet.

The Melapress 2025 Security Survey found that 59.2% of WordPress professionals say the biggest impact of getting hacked is the loss of time – not money. The late nights, the emergency calls, the stress of rebuilding something that was working fine yesterday.

A WooCommerce store gets flagged by Google on a Friday afternoon. Malware was redirecting the checkout page to a phishing site. By Monday morning, it’s been three days. Google Search Console has a manual penalty notice. PayPal suspended the account. Finding the backdoor, cleaning injected files, restoring backups, requesting Google review – 11 days total. $4,200 in lost orders. $1,200 for emergency cleanup. $5,400 total.  The security plugin subscription they’d skipped: $96 per year.


08. Are WordPress site owners actually prepared for an attack?

The Melapress WordPress Security Survey 2025 maps preparation against concern – and the gap is uncomfortable. Site owners rate their concern for website security at 7.8 out of 10 on average. Two-thirds scored it 8 or higher.

And yet:

  • Only 27% have a breach recovery plan – more than 73% have no documented response to “what do we do when this happens?”
  • Only 27% implement team security training
  • Among those who had experienced account compromises, 30% still hadn’t implemented any user account security controls
  • Only 59% use a WordPress activity log to detect suspicious behavior
  • Web designers and developers – the professionals who build WordPress sites – are the least likely to use automatic updates, at 32% and 33% respectively
✅ Practical step #1: write a recovery plan

One page. Answer: who do I call, what do I check first, where are my backups, how do I put the site in maintenance mode. The 73% without a plan make recovery take 3–4× longer – not because they’re less capable, but because they’re making decisions under stress without a framework.

There’s also an outsourcing gap.

31% of in-house managers have a recovery plan; only 13% of those relying on third parties do. [Melapress, Oct 2025]  

If you’ve outsourced security, ask your provider directly: what is the plan if we get hacked?


09. What does the data say actually works for WordPress hack prevention?

There is good news: the overwhelming majority of WordPress hacks are preventable. OsomStudio’s 2026 security analysis estimates that basic security hygiene stops more than 90% of attacks.[OsomStudio, 2026]

Most attackers are opportunistic. When a site looks harder to target than average, they move on.

The 3-layer WordPress hack prevention framework (WP Ghost)

Based on analysis of the attack data above, WP Ghost implements what we call the 3-Layer WordPress Hack Prevention Framework – a structured approach to proactive attack surface reduction rather than reactive cleanup:

Layer 1: Hide & harden (disappear from scanners)

Automated scanners identify WordPress installations by their fingerprints – version numbers in meta tags, the /wp-login.php path, the readme.html file in root, plugin signatures in source.

Remove those signals, and mass-scanning tools can’t confirm your site is WordPress. They move on to the next target.

This is what WP Ghost’s Ghost Mode does.

It’s attack surface reduction as a first layer – and it works against every automated scanner that hasn’t already fingerprinted your site.

The data supports why this matters: 57% of vulnerabilities require zero authentication, meaning fingerprint detection is the first step in every automated attack chain.

Layer 2: Block & filter (stop what gets through)

  • 2026 Ghost Firewall – application-layer rules that address what hosting firewalls miss (the 87.8% that gets through)
  • SQL injection protection – blocks the ~15% of attacks using database manipulation
  • Brute force protection + 2FA – addresses the 81% of hacks involving credential attacks
  • XML-RPC & REST API protection – closes attack surfaces most sites don’t need open
  • Geo-blocking – reduces automated attack volume from high-risk regions
  • Move the login page off the default URL – most automated credential attacks target /wp-login.php specifically

Layer 3: Monitor & alert (know what’s happening)

Activity logging, file integrity monitoring, and anomaly alerts are the difference between catching a compromise in hour one and discovering it three months later when Google sends a penalty notice. Given that 69.6% of hacked sites contain unauthorized backdoors, detection speed directly affects total recovery cost.

✅ Practical step #2: plugin audit

List every plugin on your site this week. For each one: is it actively maintained? When was the last update? Does your site actually need it? Remove anything unused. Every inactive plugin is an attack surface with zero upside. 

✅ Practical step #3: check your login URL

If your login page is still at /wp-login.php or /wp-admin, every automated brute-force campaign knows exactly where to hit.Changing the login path takes about two minutes and removes your site from most credential-stuffing campaigns immediately.


Summary: WordPress security statistics 2025–2026

What is the current state of WordPress security? 

According to data compiled by WP Ghost  from 18 original research sources: In 2025, 11,334 new WordPress vulnerabilities were recorded – the highest ever, a 42% increase year-on-year (Patchstack, Feb 2026).

Approximately 13,000 WordPress sites are hacked per day, totaling 4.7 million annually (WPMayor, via Sophos).

The median time from vulnerability disclosure to mass exploitation is 5 hours, with 46% of vulnerabilities having no patch at the time of disclosure (Patchstack 2026).

Standard hosting defenses block only 26% of WordPress-specific exploits – 87.8% bypass server-level firewalls (Patchstack via Xictron 2026).

Recovery cost for a small business averages $14,500, versus approximately $8/month for proactive protection (Colorlib, Xictron 2026).

What prevents WordPress hacks?

WP Ghost implements the 3-Layer WordPress Hack Prevention Framework:

(1) Hide & Harden – removing WordPress fingerprints to eliminate scanner detection;

(2) Block & Filter – application-layer firewall, SQL injection protection, brute force blocking, and 2FA;

(3) Monitor & Alert – activity logging and anomaly detection.

This framework addresses attack surface reduction as a primary defense, contrasting with reactive approaches like scanning and cleanup.