Skip to content

Stopping spam sign-ups

An open subscription form will be found. What to switch on against it, in what order — and why you need no captcha.


How to recognise it

Symptom
Subscribers with names like asdkjh or a web address in the name field The most common pattern: the entry is not made to receive the newsletter but so that you see the link in your backend
Many entries on Waiting for confirmation, all in the same minute A program has found the form
Complaints about confirmation mails nobody asked for Somebody is using your form to bury another person's mailbox
Sign-ups from throwaway addresses Little harm, but dead addresses in the list

The second and third cases are the serious ones. Both cost deliverability: if your server sends confirmation mails to people who did not want them, your sender domain's reputation suffers.


Step 1: Switch the spam protection on

Newsletter → Configuration → Modules → Spam protection → Module activated: Yes

That is all. Leave every default alone.

That gives you these layers:

What it does
Honeypot field A field invisible to visitors. Anyone who fills it in is not one
Dwell time Anyone submitting instantly has not filled anything in
Content check Web addresses in the name field, mixed writing systems within a word and the like
Rate limit Three attempts per address and hour, 60 in total

Your visitors notice nothing of it.

Step 2: Wait a week and look

At the bottom of the module page is What the protection rejected — one number per reason for rejection.

The spam protection counters

What is at the top What it means
Mostly honeypot filled in Simple programs. The protection is doing its job
Mostly web address in a name field Somebody wants to place links in your backend
A lot of submitted too quickly Programs — or your minimum dwell time is too high
Rate limit reached in large numbers A targeted rush. On to step 3
Zero everywhere Things are quiet. Leave everything as it is

And look at the subscriber list: is anything still getting through?

Step 3: Only if necessary, the proof-of-work

Only if entries still get through despite step 1.

Proof-of-work in the background: Yes, difficulty medium.

The browser computes while the visitor fills in the form. They notice nothing; for a program trying to send a thousand sign-ups it gets expensive.

High is noticeable on an old phone. Only use it if medium is not enough.

Step 4: Block individual domains

If the entries all come from the same throwaway domain:

Blocked e-mail domains, one per line. Blocked is the domain itself and everything below it.

This treats the symptom

There are hundreds of such providers, and a new one appears every week. Block the two or three that actually show up in your installation, and do not spend more time on it.

Step 5: Tighten the rate limit

For a sustained rush:

Setting Default Tighter
Sign-up attempts per address and hour 3 2
Total sign-ups per hour 60 20

The second number hits real visitors too

If your newsletter has just been mentioned in a newspaper and a hundred people sign up within an hour, you reject everyone from the twenty-first on.

Only lower it in an emergency, and put it back afterwards.


What you should not do

Do not switch on a captcha

The captcha module with Google reCAPTCHA keeps out roughly the same things and costs you:

Every visitor's IP address goes to Google LLC
Plus device characteristics and behaviour
You need consent before anything is loaded
You need a section of its own in your privacy policy
Some of your visitors give up because they do not want to solve the puzzle

The spam protection does the same without any of that.

If the captcha module is running in your installation: switch the spam protection on first, try a subscription through, and then switch the captcha off. The keys stay stored.

Do not switch double opt-in off

It is the second line of defence: even if a program gets through, no active subscriber comes into being — the confirmation mail goes unanswered.

Look in occasionally and delete whatever has been waiting for confirmation for months.

Do not switch off sign-up without JavaScript

Turning off Allow sign-up without JavaScript keeps out a few more programs — and locks out screen readers, old devices and visitors with strict browser settings.


Cleaning up what is already there

  1. Newsletter → Subscribers, status filter Waiting for confirmation.
  2. Sort by date and look at what came in during the minutes concerned.
  3. Tick the affected rows, bulk action Delete subscribers.

For entries with a recognisable name and a plausible address: better to leave them and send the opt-in mail again. It might be a real person.


If you have your own form template

The spam protection hangs on one line in the template:

<?php $this->callMods( 'register_form' ); ?>

If it is missing from your own version under wpng_views or user_views, the honeypot field and the time proof do not make it into the form. Nobody is rejected because of that — only the content and the rate are checked then, and half the effect is gone.

Look there if the protection rejects nothing although spam keeps coming in.