Prefer email? [email protected]

Free with any plan

Failed a security scan? WordPress security hardening

A fresh WordPress site works out of the box, but some defaults help attackers: XML-RPC accepts login attempts, usernames can be looked up and security headers are missing. Later, stray debug logs and config backups can become downloadable. We close each gap, tighten logins and user roles, and test that checkout, payments and connected apps still work.

  • Quick Fix $149
  • If we can't fix it, you don't pay
  • WordPress and WooCommerce

Sound familiar?

  • Your card processor's PCI scan failed and the report is full of terms you do not recognise
  • A security scan says XML-RPC is enabled, usernames are exposed or security headers are missing
  • Your security plugin keeps emailing you about failed logins and blocked visitors
  • Former staff, an old agency or a past developer still have administrator accounts
  • A site you know was hacked, and you want yours locked down before it happens to you
  • Nobody has looked at the site's security settings since it was built

Error messages you might see:

  • XML-RPC server accepts POST requests only.
  • Your site is set to log errors to a potentially public file
  • Insecure configuration of Cookie attributes
  • Cookie does not have an HTTPOnly Attribute
  • User enumeration possible

Why does this happen?

WordPress ships with settings chosen so that everything works on any host, not so that the site is as hard to attack as possible. Nothing is broken. But a few defaults give attackers a head start, and automated scanners, including the ones card processors run for PCI checks, flag every one of them.

The gaps we find most often, in order:

  • XML-RPC is open. The file xmlrpc.php is an older way for apps to talk to WordPress. It is switched on by default and accepts usernames and passwords, so bots use it to guess logins in bulk.
  • Usernames are easy to find. Author archive links and the public user list in the REST API can reveal the names people log in with. That hands an attacker half of every login.
  • Files that should be private can be downloaded. A debug log left switched on, a backup copy of wp-config.php, an .env file or a .git folder can expose database passwords and file paths. Folder listings in uploads show every file you have.
  • Security headers are missing. WordPress only sends a few of these on its own login and admin screens. Headers such as Strict-Transport-Security and X-Content-Type-Options have to be added at the server.
  • Logins are lightly guarded. Core has no two-factor login and no limit on failed attempts.
  • Too many people are administrators. Old staff, agencies and developers keep full access long after they need it, and any administrator can edit plugin and theme code from the dashboard.

On a WooCommerce store this matters more, because the same site handles customer accounts and payments, and a failed PCI scan can put your card processing at risk.

Try this first

These checks are safe on a live site. The only changes they ask for are to accounts and sign-up settings you control.

  1. Review your administrators. Go to Users, All Users and filter by Administrator. For anyone who no longer needs full access, edit the user and change their role, for example to Editor, or to Shop Manager on WooCommerce. Change the role rather than delete the account, so the content they wrote stays attached to them. Before you change a role, check the account is not the one a connected service logs in with, such as stock sync, accounting or a till system. On WooCommerce, WooCommerce, Settings, Advanced, REST API shows which user each key belongs to. If you are not sure, leave that account for us. Never demote your own account. If you see an administrator nobody recognises, stop here and read the hacked site section below.
  2. Check who can sign up. Go to Settings, General. Under Membership, “Anyone can register” should only be ticked if you need it, and New User Default Role should never be Administrator. On WooCommerce, customer sign-up is controlled by WooCommerce’s own settings, so this box does not stop customers creating accounts at checkout.
  3. Sign out old sessions. Go to Users, Profile and use “Log Out Everywhere Else” if it is available. For other administrators, open each one in Users, All Users and use “Log Out Everywhere” on their screen. Look at Application Passwords on your profile and on each administrator’s screen, and write down any you do not recognise. Ask whoever set up your integrations before you revoke one, because a connected service may depend on it.
  4. Read Site Health. Go to Tools, Site Health. Items marked Security are worth a look, such as “Your site is set to log errors to a potentially public file”. Write them down rather than changing settings yourself.

Then hand it over. Blocking XML-RPC, adding headers, blocking files and turning off the file editors all happen in server rules or wp-config.php. One typo there can take the whole site down, and a header that is too strict can stop card fields from loading at checkout.

What does a security scan actually check?

Most scanners, including PCI scans, look at your site from the outside, the same way an attacker does. They request xmlrpc.php, try to look up usernames, ask for well-known private files and read the headers your server sends. Our free WordPress audit runs the same kind of checks and lists each gap it finds. Some findings are noise, such as WooCommerce cart cookies that are meant to be read by JavaScript. Others, such as a downloadable debug log, need fixing straight away. Part of the job is telling them apart and writing that down for your scan vendor.

What if my site has already been hacked?

Then hardening comes second. An administrator nobody created, files you did not change or spam pages in Google mean someone is already inside, and locking the doors does not remove them. Start with our hacked site cleanup. For what a break-in really costs a small business, read the real cost of a hacked WordPress site.

Hardening also works best on a site that is up to date. If plugins or WordPress itself are far behind, see our update catch-up. Hardening closes the gaps you have today; BoltPress Security, included in every care plan, then watches for new ones, with a daily check of your plugins, theme, WordPress and PHP version against known security problems. If your scan flagged certificate or “not secure” warnings, see the SSL and mixed content fix. For everything else, browse the Fix WordPress page.

What's included

Included

  • Closing or limiting XML-RPC, while keeping any app or service that still depends on it working
  • Stopping usernames from leaking through author links and the public user list
  • Blocking public access to config backups, debug logs, environment and git files, and folder listings
  • Adding security headers at the server, tested against your checkout and payment pages
  • Login protection for administrators, with limits on repeated failed attempts and two-factor login
  • Turning off the dashboard file editors and moving every account to the lowest role it needs
  • Re-running our checks, telling you when to re-run your vendor's scan, and writing up what changed for your records or your scan vendor

Not included

  • Removing malware, backdoors or spam from a site that is already hacked
  • Rewriting a plugin's code to clear a scan finding; we update or replace it, or tell you who to ask
  • Server settings your host does not let anyone change, such as firewall rules on shared hosting
  • Ongoing monitoring and updates after the job is done

When it becomes a Comprehensive Fix job: If we find signs the site is already compromised, such as an administrator nobody created, changed core files or injected code, hardening stops there. Cleaning the site first is a Comprehensive Fix, and we tell you before any extra work starts.

How it works

  1. Secure access

  2. Full backup

  3. Diagnose (on staging for stores)

  4. Fix

  5. Verify (a test order on WooCommerce)

  6. Report

Two ways to get it fixed

Pay once for this fix, or get it free as part of a care plan.

Free with any plan
  • Essential $89 per month
  • Managed $249 per month
  • Complete $599 per month

Includes 1 free fix.

Compare plans
Quick Fix
$149

Single-issue resolution: fatal errors, plugin/theme conflicts, update failures, PHP version upgrades.

Fix it for $149 : Security hardening

If we can't fix it, you don't pay.

Bigger than one cause? Comprehensive Fix $349: Security hardening

Prices in USD.

Refunds are handled by email: [email protected]

What we need from you

  • A WordPress administrator login, or a temporary one we can use
  • Hosting control panel or SFTP access, because most of this work happens outside wp-admin
  • The security or PCI scan report, if you have one
  • The apps and services that connect to the site, such as a mobile app, stock sync, accounting or a till system
  • Who should keep administrator access, and who only needs to edit content or manage orders

Frequently asked questions

Will hardening break my checkout or payments?

It can if it is done carelessly, which is why we test. A strict content security policy can block the scripts and frames your payment provider loads, and blocking XML-RPC can disconnect an older app. We roll out each change, place a test order and check connected services before we call it done.

Should I just turn off XML-RPC?

On most sites, yes, but check first. WordPress leaves it on by default, and it accepts login attempts that some login limiters never see. Most modern apps and plugins use the REST API instead, but a few older tools and integrations still rely on XML-RPC. We find out what uses it before we block it.

My PCI scan flags the woocommerce_cart_hash cookie. Is that a real problem?

Usually not. WooCommerce reads that cookie with JavaScript to notice cart changes, so it cannot carry the HttpOnly flag, and it holds no login session. Scan vendors often accept a documented exception for it. We fix the findings that are real, such as cookies missing the Secure flag on an HTTPS site, and write up the rest.

Doesn't a security plugin already do all of this?

Partly. A good security plugin adds login limits, two-factor login and a firewall, but several items scanners flag live outside it: server headers, files the web server hands out, folder listings and settings in wp-config.php. Plugins also leave defaults off until someone turns them on. We configure what you have and handle the rest at the server.

Does WordPress have two-factor login built in?

No. WordPress core still logs people in with a username and password only. Two-factor login comes from a plugin or from your host's sign-in system. We set it up for every administrator and shop manager, and make sure each of them can log in with it before we leave.

Do I need to change the admin username?

Not usually. A username is not a secret, so the password and two-factor login are what keep an account safe. It still helps to stop usernames leaking through author links and the REST API, and to retire any account called admin, the first name bots try. WordPress cannot rename a user from the dashboard, so we create a new account and move its content across.

Not sure this is the problem?

Our free WordPress audit checks your site for this issue and others, and explains every finding.

Run the free audit

Stop fighting your website.
Let us fix it.

If we can't fix it, you don't pay.