Login Security features

Every feature, grouped by what it does. All 20 are in every plan.

$19 a year for one site · or pay once from $49

See the plans

Stopping the guessing

14 features

The Login Security dashboard in WordPress admin. A green notice reads 1 lockout this week, and the site is fine: 13 attempts were refused, from 4 addresses. Four cards show 13 refused this week, 1 locked out, 4 addresses and 1 signed in. A panel headed You cannot be locked out lists the address you are on, that signed-in administrators are never locked out, and the sign-in page, with a Never lock out the address I am on now button. Below it, Usernames being tried shows admin tried 7 times, marked a real account and no second step.
The first screen says what has been happening at the sign-in page, and shows why you cannot lock yourself out.
  • Five wrong passwords and you are out

    Count the failures from one address inside a window you choose, and lock it out when it goes past.

    More: Five wrong passwords and you are out

    The first lockout is twenty minutes, the next is an hour, then three, then nine, then a day — because a machine that comes straight back has learned nothing and a person who remembers never sees the second one. A correct password clears the count against that account, and never the address's: signing in to an account of your own does not buy more guesses at anybody else's.

  • It also catches the slow, spread-out kind

    One password list worked through from a thousand different machines never reaches five tries from any of them, so counting by address alone never notices it at all.

    More: It also catches the slow, spread-out kind

    This counts the failures against one username too, across every address they came from.

  • Refused before the password is checked

    A password hash is deliberately slow to compute — that is the whole point of one — and a site that checks every guess before saying no has been taken down by its own defence.

    More: Refused before the password is checked

    A locked-out address is turned away at the very first hook WordPress offers, before it has looked anything up.

  • Usernames nobody on your site has

    admin, administrator, root, test, webmaster and a few more.

    More: Usernames nobody on your site has

    A request trying one of those is a machine working from a list, and it can be told no without touching the database. Checked against your own users first, so a site that genuinely has somebody called support never refuses them.

  • A second step, with nothing sent anywhere

    Six digits from an authenticator app after the password — the only thing here that helps against a password somebody else already has.

    More: A second step, with nothing sent anywhere

    No text messages, no account with a service, no third party: the app and your site share a secret and both look at the clock. The QR code is drawn on your own server rather than fetched from a chart service, because the one thing on that screen that must not leave your site is the secret. Ten recovery codes, an administrator can switch it off for anybody, and WP-CLI can too. On a WooCommerce shop, customers set it up in a Two-step sign-in tab in My Account, where WooCommerce keeps them, and are asked for it when they sign in there.

  • Refuse a password a machine would find

    Counting wrong passwords is worth nothing if the right one is on every list.

    More: Refuse a password a machine would find

    Set a minimum length and refuse the usual passwords — decoration and all, because Password1! is password with a shift key — along with keyboard runs, rows of digits, and anything holding the username or the site's name. Checked when somebody sets or resets one, entirely on your own server, with nothing sent anywhere. Every form, including WooCommerce's own registration, account and reset pages — which are the ones your customers actually meet. The passwords already on your site are judged the next time each owner signs in, for the people the rules apply to, and anybody whose password fails is asked to change it and listed on the Users screen. The password itself is never stored. Off until you switch it on, and it applies either to everybody or only to the people who can change the site.

  • Usernames nobody can look up

    A stock WordPress site hands out its usernames to anybody who asks: the /?author=1 redirect, the REST API's user list, the author of every embed and the author sitemap.

    More: Usernames nobody can look up

    All four are closed, while author pages and bylines stay. And the Settings screen names anybody whose public name is still their username, which no setting can hide.

  • XML-RPC, without breaking Jetpack

    One XML-RPC call can carry hundreds of password guesses in a single request, which is how large-scale guessing is actually done.

    More: XML-RPC, without breaking Jetpack

    The default blocks that one call and leaves everything else working, so Jetpack and the mobile app carry on. You can also switch XML-RPC off entirely, or leave it exactly as WordPress has it.

  • Move the sign-in page

    Off by default, and honest about what it is: it does not make a password harder to guess, it stops the machines finding the page.

    More: Move the sign-in page

    On most sites that is thousands of requests a month arriving as a 404 instead of as a password check. The new address is shown and emailed the moment you save it.

  • The same answer whichever half was wrong

    WordPress says "Unknown username" for one and "the password you entered for the username X is incorrect" for the other, which hands a machine the answer to half its problem: it learns which usernames exist and spends everything on those.

    More: The same answer whichever half was wrong

    While "Stop somebody after too many wrong passwords" is on, both get the same sentence, on wp-login.php, a moved sign-in page and WooCommerce's My Account alike, and on the WordPress sign-in page the name stays in the box and the form shakes either way. A password reset for a name that is not an account goes on to the page a real one gets, sending nothing. The registration form keeps WordPress's own words, so somebody signing up is told what to fix.

  • Password reset emails, limited

    The lost-password form sends a real email every time anybody asks, so a machine going down a list of usernames fills your users' inboxes and your mail allowance.

    More: Password reset emails, limited

    By default, three emails an hour for one account and five requests from one address, and while the limit is on, an address locked out for guessing is told how long to wait instead of being sent one. A request your CAPTCHA turned away, or an email your site could not send, uses up nobody's hour, and a made-up name is refused at its fourth like a real one. On wp-login.php and WooCommerce's My Account alike. Trusted addresses and signed-in administrators are never limited.

  • Fake sign-ups turned away, with no puzzle

    Machines that make accounts send welcome emails to made-up addresses and fill your customer list.

    More: Fake sign-ups turned away, with no puzzle

    The sign-up forms on wp-login.php and WooCommerce's My Account turn them away: a field only a machine fills in, a form sent back too quickly, and a limit of new accounts from one address in an hour. At checkout only the limit applies: the field and the clock never stop a customer paying, though an order that would make one account too many from one address in the hour is refused. Everything happens on your own server, and each sign-up turned away is in the log with the reason. On for new sites; a site that already had the plugin is asked first.

  • Bring second steps over from Wordfence or Two Factor

    People who set up an authenticator app with Wordfence, Wordfence Login Security or Two Factor keep it: one button copies each secret across, so nobody scans a new QR code.

    More: Bring second steps over from Wordfence or Two Factor

    It lists who would come across first, works with the other plugin switched off, and changes nothing of the other plugin's. Anybody with a second step here already keeps theirs, and each person brought over is asked to make ten new recovery codes on their profile. WP-CLI does the same, with a dry run.

  • Skip the code on a browser you choose, if you allow it

    Off until you switch it on.

    More: Skip the code on a browser you choose, if you allow it

    Then the code screen offers "Do not ask on this browser for 30 days", on wp-login.php and at My Account. You choose the days and the roles it is never offered to, and administrators start left out. The cookie is HttpOnly, sent over HTTPS only and kept for your site alone, and only a keyed hash of it is stored. A new password ends it, and people can forget any browser from their profile.

Seeing what happens

3 features

The Who has tried log, with tabs for Everything, Refused, Locked out, Signed in, Password resets and Sign-ups, and a search box. Rows from October 22, 2026 show 203.0.113.45 trying admin and being turned away because the address was locked out, 203.0.113.9 signing in as hannah after one wrong password, 192.0.2.140 trying shop and larkfield, and 198.51.100.77 trying administrator, turned away as a username nobody here has. Each row has a Let in button.
Every attempt is written down: when, from which address, which username was typed, and what happened to it.
  • Every attempt, written down

    When, from which address, which username was typed, and what happened to it — signed in, wrong password, turned away, locked out.

    More: Every attempt, written down

    Searchable by address or username, filterable by outcome, and kept for as long as you choose. Successes are in there too, because "was that me?" is the question somebody asks the morning after.

  • Told once a day, not forty times

    An email when somebody is locked out, at most one a day however many there are — because a site the machines have found is locked out dozens of times a day and forty emails teaches you to ignore the forty-first.

    More: Told once a day, not forty times

    It names the address and why the lockout happened, the username when one was tried from many addresses, and how many attempts were refused in the last day while attempts are being recorded.

  • See who has a second step

    Requiring a second step only reaches somebody the next time they open the admin.

    More: See who has a second step

    A Second step column on Users, with recovery codes left, a link that lists the people who can change the site and have not set one up, and the count on the Settings screen. On the Dashboard, a real account being guessed at with no second step gets a Send a password reset button, for anybody who could edit that account from the Users screen.

Not locking you out

3 features

The WordPress sign-in page with a red message: Too many sign-in attempts from here. Try again in 19 minutes. The username and password fields are empty below it.
After five wrong passwords, that address is refused at the sign-in page before any password is checked.
  • You cannot lock yourself out

    A signed-in administrator is never locked out.

    More: You cannot lock yourself out

    The address you switched the plugin on from is added to the trusted list automatically. There is a recovery link that trusts whatever address you open it from for an hour, so it works from a train or a phone. And WP-CLI can unlock anything from the command line if all else fails.

  • Trusted addresses, including whole ranges

    One per line: a single address, a range written as 203.0.113.0/24, or 203.0.113.* which means the same thing.

    More: Trusted addresses, including whole ranges

    An office, a VPN, a monitoring service. Their attempts are still recorded — trusted means never locked out, not invisible.

  • WP-CLI for everything

    wp login-security status for what is going on, unlock for one address or everybody, trust to add an address, door to print the sign-in address, log to read the attempts, and two-factor to list who has a second step or switch one off.

    More: WP-CLI for everything

    Which is the way back in that works when the admin screens are the thing you cannot reach.

Pricing

Every plan includes every feature. Choose how many domains, and whether to pay yearly or once.

Pay yearly renews until you cancel

1 domain One year of updates and support
$19a year
5 domains One year of updates and support
$29a year
Unlimited domains One year of updates and support
$39a year

Pay once (lifetime) no renewals

5 domains Updates and support for as long as we publish it
$49once
Unlimited domains Updates and support for as long as we publish it
$69once
  • Every plan includes every feature. You choose only the number of domains.
  • 30-day refund, no reason needed. Refund policy
  • Licence key and download straight after payment, by Stripe.
  • A lapsed licence stops updates and support. It never switches a feature off.
  • Local, development and staging copies are free and do not count against your domains.
  • Yearly plans renew at the then-current price until you cancel. Cancel any time from your account.
  • Where tax applies it is calculated at checkout and shown before you pay.

Licence questions