Hushfort
Menu

How do I stop spam user registrations in WordPress?

By Eureka Studio · Updated

Short answer

If you don't need open registration, turn it off. If you do, limit signups per IP and per network each hour, add a site-wide hourly ceiling that holds new accounts for review when it trips, block disposable emails, add invisible honeypots and throttle welcome emails. On WooCommerce, never block checkout; hold suspicious accounts instead.

Steps

  1. 1Step 1

    Check whether registration needs to be open

    In Settings → General, see if Membership "Anyone can register" is ticked. In WooCommerce, check whether customers can create accounts on My Account. If nobody needs it, turn it off.

    WordPress Settings → General with Membership: Anyone can register ticked and New User Default Role set to Subscriber
  2. 2Step 2

    Turn on Registration Protection in Monitor mode

    In Hushfort, open Registration Protection, switch it on and set Mode to "Log only — Monitor mode, blocks no registrations". Keep Invisible honeypots on and save, so you can check the log before it acts.

    Registration Protection switched on with Mode set to Log only — Monitor mode, and invisible honeypots on
  3. 3Step 3

    Set the hourly limits and the ceiling

    Limit signups per IP and per network each hour, then set the site-wide Hourly registration cap. When the cap trips, the circuit breaker holds new accounts for review.

    Registrations per IP 3 per hour, per network 10 per hour and hourly registration cap 50 for the whole site
  4. 4Step 4

    Watch a flood meet the ceiling

    When signups pass the hourly cap, new accounts land in Pending accounts with the reason "Circuit breaker tripped". Approve the real ones; delete the rest.

    Pending accounts: four new accounts held with the reason Circuit breaker tripped, with Approve and Delete buttons
  5. 5Step 5

    Clean up the accounts already created

    Use the Cleanup Wizard: press 1. Preview to list accounts with no orders, comments or posts, then 2. Back up and delete. Deleted accounts can be restored for 30 days.

    Cleanup Wizard preview: 66 accounts are candidates for deletion, listed with masked emails and registration dates

Why it matters

A few fake accounts are harmless. A flood isn't. We built this layer after one site received around 10,000 signup requests in a single hour and ended up with tens of thousands of fake accounts. On another site, the welcome emails sent to fake accounts used up the mail quota, so real order emails stopped going out.

Fake registrations cost you in quieter ways too: a bloated users table, slower admin screens, polluted customer lists and email reports, and a mail server reputation that drops every time a welcome email bounces off an address that doesn't exist.

Common mistakes

  • Leaving registration open by accident. "Anyone can register" is sometimes switched on during setup and forgotten.
  • A default role that's too powerful. New users should be Subscriber or Customer, never Author or above.
  • Per-IP limits only. Floods often come from many addresses in the same network. Limit per network too.
  • Closing registration when a flood hits. That locks out real customers, which is exactly what an attacker wants. Holding new accounts as pending keeps the door open while the flood passes.
  • Blocking at checkout. A store should never lose an order to a spam filter.
  • Deleting without a backup. Bulk deletion is permanent. Preview first and keep a copy.

Without a plugin

  1. Turn registration off if you don't need it: Settings → General → uncheck "Anyone can register". For WooCommerce, in WooCommerce → Settings → Accounts & Privacy, uncheck account creation on the My Account page.
  2. Keep the default role low: Settings → General → New User Default Role → Subscriber.
  3. Add a honeypot to the WordPress form with two small hooks:
<?php
add_action( 'register_form', function () {
    echo '<p style="position:absolute;left:-9999px" aria-hidden="true">'
       . '<input type="text" name="hp_company" tabindex="-1" autocomplete="off"></p>';
} );
add_filter( 'registration_errors', function ( $errors ) {
    if ( ! empty( $_POST['hp_company'] ) ) {
        $errors->add( 'spam', 'Registration failed.' );
    }
    return $errors;
} );

This covers only the core WordPress form, not WooCommerce or other registration forms, and it has no rate limits, no ceiling and no cleanup. For an active flood, these steps help but won't stop it.

If something goes wrong

  • Real customers can't register. Check the log in Monitor mode, and look at whether your office or event network is hitting the per-network limit. Raise it or allowlist the IP.
  • Pending accounts piled up. They're cleaned automatically after 7 days. Approve the real ones before then.
  • A customer didn't get a welcome email. If the ceiling tripped, held accounts receive no emails until approved. That's on purpose.

With Hushfort

Hushfort's Registration Protection covers WordPress and WooCommerce registration, plus other registration forms:

  • 3 signups per hour per IP (IPv6 /64) and 10 per hour per network (/24, IPv6 /48) by default.
  • A site-wide ceiling of 50 per hour with a circuit breaker that stays open for 60 minutes. By default it holds new accounts as pending with no emails; you can choose to close registration instead.
  • Disposable-email blocking and Gmail-variant detection (dots, +tags, googlemail).
  • Invisible honeypots on WordPress and WooCommerce registration.
  • Welcome-email throttling, so fake signups don't burn your mail quota.
  • A cleanup wizard with preview and a 30-day restorable backup.
  • Pending accounts are removed automatically after 7 days.

Checkout is never blocked. You can run it in Monitor mode first, so you see the effect before it acts.

Frequently asked questions

Why am I getting so many fake user registrations?

Bots register accounts to post spam, test stolen email lists, or abuse welcome emails to send mail through your server. Open registration forms are easy, automated targets.

How do I delete fake WordPress users in bulk?

In Users, filter by role and sort by registration date, then bulk delete. Back up first. Hushfort's cleanup wizard previews the list and keeps a restorable backup for 30 days.

Will limiting signups block real WooCommerce customers?

Not at checkout. Hushfort never blocks a checkout; a suspicious account created during payment is held for review while the order goes through.

What are Gmail variant addresses?

Gmail ignores dots and anything after a plus sign, and googlemail.com is the same mailbox. Bots use [email protected] and similar to create many accounts for one inbox.

Should I add a CAPTCHA to the registration form?

You can, but it adds friction for real customers. Honeypots, hourly limits and a site-wide ceiling stop floods invisibly.