SeenSecure Help

Login Security

Comprehensive access protection system with failed attempt control, CAPTCHA, 2FA authentication, restricted accounts, and block management.

🔐 Login Configuration

The Login tab lets you enable or disable the entire access security system and configure the core brute-force protection parameters: failed attempt limit, temporary block duration, conditions for permanent blocks, plus email notifications.

Configuration Parameters

Enable/Disable System

Master switch that enables or disables all login protection. When disabled, no attempt limits or blocks are applied.

Max Failed Attempts

Range: 3-10. Default: 5. Number of failed login attempts allowed before applying a temporary block to the IP.

Temporary Block Duration

Range: 5-1440 minutes. Default: 15. How long the IP remains blocked after exceeding the attempt limit.

Permanent Block

Range: 2-10. Default: 3. Number of consecutive temporary blocks after which the IP receives a permanent block.

Email Notifications

Configure the email address for alerts. Options: notify on blocks and notify on password changes.

Protection Flow

💡 How it works: After N failed attempts from the same IP, a configurable temporary block is applied. If the IP accumulates N temporary blocks, it becomes a permanent block. Email notifications keep the administrator informed of all suspicious activity.

Detailed Behavior

  • Temporary Block: Applied after exceeding the failed attempt limit. The IP is blocked for the configured time (default 15 min). When it expires, the IP regains access automatically.
  • Permanent Block: Activated when an IP accumulates multiple temporary blocks (default 3). Requires manual administrator intervention to unblock.
⚡ Recommended setting: Keep it enabled. Limit: 5 attempts, temporary block: 15 min, permanent block: after 3 temporaries. Enable email notifications for blocks and password changes.

⏱️ Logout Due to Inactivity (PRO)

Logs out users with the roles you choose after the set time without using their session. It prevents a dashboard left open on someone else's computer (office, hotel, internet café) from being available to anyone.

  • Minutes without activity: between 5 and 1440 (24 hours). Default: 30.
  • Roles: Administrator and Editor by default.
  • What counts as activity: real use (mouse, keyboard, scrolling, taps) in any tab of the site. The periodic WordPress background check (heartbeat) does not count.
  • Prior warning: one minute before, a notice with a "Stay logged in" button appears. When the session closes, the user returns to the login screen with the message "Your session was closed due to inactivity".

Each device counts separately: being active on your phone does not keep open a session forgotten on another computer. Configure it in Login Security → Login.

📬 New Login Alert (PRO)

When someone logs into an account from a browser or device never used before, or from a new country, SeenSecure emails the user the details of the login (date, device, IP and country).

  • "It was me": the device becomes trusted and no further alerts are sent about it. It only works when the link is opened in the same browser and device used to sign in: someone reading the email elsewhere cannot mark their own device as trusted.
  • "It wasn't me": all sessions of the account are closed, on every device, and the current password stops working (the attacker knows it). The owner receives the standard WordPress email to choose a new one: the alert link never opens the password change directly.
  • Suspicious IP block: when “It wasn't me” is confirmed, the IP used to sign in goes to IP Management → Blocked for 30 minutes (configurable in the card; 0 = do not block), with its reason in the history, and is unblocked automatically. This way the attacker cannot try again while the owner changes the password. It is not blocked if it is the same IP the button is pressed from (the owner would be locked out) or if it is whitelisted.
  • Administrators and Editors: the site administrator also receives a copy with the same buttons (optional, with its own email).
  • Safe against email scanners: the buttons open a confirmation page; the action only runs when you click on it. Each link works once and expires after 7 days.
  • No alerts when you enable it: the first time each user logs in after enabling it, their device and country are registered without an alert.

The device is recognised by its own browser cookie; the country, with the same geolocation as the rest of the firewall. Configure it in Login Security → Login.

🖥️ Concurrent Session Limit (PRO)

Limits how many sessions the same user of the roles you choose can have open at the same time (from 1 to 10). If they log in on a new device when the limit is already reached, before they can use the site they see a screen with their other sessions (browser, IP and login time) and choose:

  • «Close that session and continue here»: the oldest session is closed and they log in on this device. With a limit of 1 the other one is closed; with 2, the first of the two; and so on.
  • «Cancel and do not log in»: they do not log in and their other sessions stay open.
  • The other device is told: back on the login screen it sees that its session was closed because someone logged into the account from another device, with the advice to change the password if it was not them.
  • Until they choose, nothing works: the new session cannot browse or use AJAX or the REST API until it answers.
  • Nobody gets locked out: another session can always be closed to log in. Sessions already open when it is enabled are kept.

Why limit sessions?

Every open session is a door into the account. Without a limit, a stolen password or a copied session cookie can be used alongside the owner without anyone noticing, and sessions forgotten on other computers stay open for days.

Attacks it prevents or exposes

  • Stolen password used in parallel (phishing, leaks, reuse): with a limit of 1 the attacker cannot be in at the same time as the owner without kicking them out, and the owner sees the warning. When the owner logs back in, it is the attacker who gets kicked out.
  • Session hijacking with a stolen cookie (browser malware, public Wi-Fi): the cookie stops working as soon as that session is closed.
  • Shared accounts among several people, for example a paid subscription or course used by several people at once.

What it does not do: it does not stop someone who already knows the password from logging in; it makes it visible and forces them to kick the owner out. Combine it with two-step verification and the new login alert.

Recommended: 1 for Administrators; 2 or 3 if the same person uses a computer and a phone. Configured in Login Security → Login.

🛡️ CAPTCHA

The CAPTCHA system protects your forms against bots and automated attacks. It offers 7 different verification modes to adapt to each site's needs.

Available CAPTCHA Modes

🎨 Visual

Color-based challenge. No external services required. Works completely offline.

🔢 Math

Simple math operations. Easy for humans, hard for bots. No external dependencies.

😀 Emoji

Visual emoji challenges. Modern and user-friendly. No external JavaScript.

🌈 Color

Color-divided circles. User identifies color patterns. High effectiveness.

🔲 reCAPTCHA v2

Google service with the classic "I'm not a robot". Requires Google Site Key and Secret Key.

👁️ reCAPTCHA v3

Invisible detection. Uses risk score (0.0-1.0). Does not interfere with user experience.

🔀 Hybrid

Combines Visual + reCAPTCHA v3. Maximum protection. reCAPTCHA v3 works silently in the background.

Forms to Protect

You can select which forms have CAPTCHA applied:

  • Login: Protects the login form against brute force.
  • Register: Prevents mass creation of fake accounts.
  • Comments: Prevents automated spam in comments.
  • Password Reset: Blocks password reset attacks.

Google reCAPTCHA Configuration

For modes using Google reCAPTCHA (v2, v3, Hybrid), you need to register your site at Google reCAPTCHA Admin and obtain the following keys:

Site Key

Public key embedded in the site frontend to display the reCAPTCHA widget.

Secret Key

Private key for server-to-Google communication. Keep it secure at all times.

v3 Threshold

Range: 0.0-1.0. Recommended: 0.5. Minimum score to consider a user as human. Lower values are more permissive.

Anti-Abuse Protection

Ban IP After Failures

Number of failed CAPTCHA attempts before blocking the IP. 0 disables this feature.

Log Events

Saves all CAPTCHA events in the history log for later analysis.

⚠️ Important: Modes using Google reCAPTCHA require internet connectivity and valid keys. If Google's service fails, users will not be able to complete protected forms.
💡 Recommendation: Start with Visual or Math mode. If you need more security, migrate to Hybrid mode (Visual + v3).

🔑 Two-Factor Authentication (2FA)

Two-factor authentication adds an extra layer of security by requiring a second verification factor in addition to the password. The system supports TOTP (Time-based One-Time Password) via authenticator apps and email codes as an alternative.

Initial Activation by Admin

Before configuring global 2FA policies, the admin must activate 2FA on their own account. The system generates a QR code with the TOTP secret that must be scanned with an authenticator app (Google Authenticator, Authy, Microsoft Authenticator, etc.).

Global 2FA Policy

Mandatory / Optional

Defines whether 2FA is mandatory for all users or just recommended.

Role-Based Enforcement

Select specific roles that require 2FA (Administrator, Editor, etc.).

Deadline Date

Date after which users without active 2FA will not be able to access the system.

Email Code / Dual

Enable email codes as a TOTP alternative. Dual verification requires both: email + app.

User Management

The admin panel allows searching users, resetting or disabling 2FA for specific accounts, and resending recovery codes. Includes statistics cards: Users with 2FA, Without 2FA, Policy status, Total users, and Email code status.

⚠️ Important: Recovery codes are the only way to regain access if the 2FA device is lost. Store them in a safe but accessible place. Do not store them on the same device that uses 2FA.
💡 Recommendation: Implement 2FA gradually. Start with administrators, then expand to other roles based on risk level. Provide technical support during the transition.

🚫 Anti Session Hijacking

Detects when a logged-in user suddenly switches country mid-session — the typical sign that someone has stolen their credentials or session cookie, for example after intercepting it on public or shared wifi. The system stores the country each user logs in from and compares it on every subsequent request.

😌 Peace of mind if your session has already leaked: If you've ever connected to public or shared wifi (airport, café, hotel) and you're worried someone may have intercepted your WordPress session, this is exactly what this feature watches for. Even if an attacker gets your session cookie, the moment they try to use it from a different country than yours, SeenSecure detects it and, in Block mode, closes that compromised session instantly — without affecting your legitimate session on your own device.

Configuration Parameters

Enable Anti Session Hijacking

Master switch for the feature. Only affects users with a WordPress account (administrator, editor, etc.). Anonymous visitors have no session that could be hijacked, so they are unaffected.

Action on country change

Dropdown with two options: Monitor (only logs and alerts) or Block (closes the compromised session). See details of both modes below.

Trusted countries (ISO codes)

Text field with 2-letter country ISO codes separated by commas, e.g. ES, PT, FR. Connections from these countries will never be flagged as suspicious. See the full ISO code explanation below.

Email the administrator

Independent of the chosen mode. When enabled, every time a suspicious country change is detected, an email is sent to the address configured in WordPress Settings → General, in both Monitor and Block mode.

Action Modes

👁️ Monitor

Logs the event and emails the administrator, but doesn't interrupt any session. Recommended to start with.

🔒 Block

Automatically closes the compromised session as soon as it detects the country change. Only affects that specific session, not the others. The stolen cookie is invalidated on the server instantly: even if the attacker keeps it, it's now useless — dead data, and there's no need to change the user's password.

What are country ISO codes?

They are the standard 2-letter codes (ISO 3166-1 alpha-2) that identify each country online — the same ones used in country domains (.es, .fr...) and address forms. Write them in uppercase, separated by commas if you add more than one. No need to memorize them: just the country you or your team usually connect from.

Country ISO Code Country ISO Code
SpainESUnited StatesUS
FranceFRUnited KingdomGB
GermanyDEMexicoMX
PortugalPTArgentinaAR
ItalyITColombiaCO

Your country not in the table? Search "ISO 3166-1 alpha-2 code" followed by your country's name, or check the full official list at iso.org.

⚠️ If you travel or use a VPN: Your connection country will change and, without a trusted country added, the system will flag it as suspicious (and in Block mode, will close your own session). Add in advance the countries you usually connect from, including your VPN's if you use one daily.

Email Notification

Enabling the "Email the administrator" checkbox means you'll receive an email at your WordPress contact address (Settings → General) every time a suspicious country change is detected on an active session. The email includes the affected user, the original country, the country the change was detected from, and whether the session was closed or only logged, so you can act if you consider it necessary even in Monitor mode.

ℹ️ Requires the WAF in Protection mode: This feature can only close sessions if the Firewall is active in Protection mode. If the WAF is in Monitoring mode or disabled, Anti-Hijack will only log events without being able to close any session.
🛡️ What about the Firewall's IP Whitelist? A whitelisted IP skips WAF blocks (brute force, rate limiting, anti-bot...), but does NOT exempt it from Anti-Session-Hijack: if a stolen cookie is used from a trusted IP located in a different country than the original login, this protection still triggers. That's intentional — otherwise, routing traffic through a whitelisted IP would be enough to use stolen sessions without you noticing.

Available on the PRO plan. Configurable from Login & 2FA → Anti-Hijack in the SeenSecure panel.

👤 Restricted Accounts

The restricted accounts system blocks common or dangerous usernames that attackers often use. When an IP attempts to access with multiple restricted names, it is automatically blocked and added to the permanent blacklist.

Blocked Usernames by Default

admin, administrator, root, test, wordpress, user, webmaster

You can add or remove names from the list. Changes apply immediately.

IP Block Threshold

Configure how many attempts with restricted names from the same IP trigger a permanent blacklist block with reason login_blackname.

Threshold Security Recommended Use
1 Very strict High-risk sites
3 Standard General recommended
5 Permissive High legitimate traffic

Recent Attempts Summary

The panel shows a summary table with the latest access attempts using restricted usernames, including the IP, attempted name, date/time, and whether it resulted in a block.

IPs Blacklisted via login_blackname

List of IP addresses that have been permanently blocked for exceeding the restricted name attempt threshold. You can unblock them manually from the Active Blocks section.

💡 Tip: Start with the standard threshold of 3 attempts. After a week of monitoring, adjust based on the patterns observed on your site.

🏢 Automatic ASN Block (distributed attacks) (PRO)

A distributed brute-force attack does not come from a single IP: the attacker rents dozens of IPs from the same server or proxy provider (the same ASN) and tries usernames and passwords switching IP on every attempt. Since each IP only tries once or twice, none reaches the per-IP block limit.

This protection counts the different IPs from each provider that fail to log in within a time window. When they reach the minimum, it blocks the whole provider for the configured time.

  • Different IPs to block: 5 by default (2 to 50).
  • Window: 10 minutes by default (1 to 120).
  • Block duration: 60 minutes by default (5 minutes to 7 days). It is lifted automatically.
  • What is blocked: by default only the login, XML-RPC and the custom login URL. Optionally, the whole site.
  • Every failure counts: wrong password, CAPTCHA, browser fingerprint, restricted username and XML-RPC.

Earlier step: invisible JS challenge

Before blocking, SeenSecure tries something softer. With just a few IPs failing (2 by default), the provider is put under watch: for 60 minutes, all its IPs get an invisible browser check when opening the login, wp-admin or the custom login URL.

  • A real browser solves it on its own in milliseconds (a small proof of work using the browser’s cryptography) and the person sees the login as usual.
  • A script bot (curl, Python…) does not run JavaScript and stays at the check: it never even submits the form.
  • If IPs that already passed the challenge fail to log in (bots with an automated browser such as Puppeteer or Playwright), the provider is blocked sooner, without waiting for 5 IPs.
  • Providers with recent legitimate users are never blocked: they are only watched.
  • It does not apply to XML-RPC (used by apps, which cannot solve it) or to anyone already logged in to the dashboard. In firewall Monitor mode it is only logged.

It is shown in IP Management → ASN (“ASNs under watch” table, with a “Remove watch” button) and in the Traffic Log as asn_challenge. Configure it in the same card (IPs for watch and duration).

Safeguards

  • It never blocks the provider of users who logged in successfully in the last 30 days (including yours).
  • Allowlisted IPs are never blocked.
  • Why only the login by default: an ASN can be an entire carrier; blocking only the login keeps the site visible to everyone.
  • With the firewall in Monitor mode, it is logged but not blocked.

Where to see it and how to unblock

IP Management → Blocked ASNs lists each blocked provider with the reason, how many IPs attacked, the scope and how long it lasts, with an Unblock button. Blocks and unblocks are recorded in the IP Management history and, if enabled, you get an email with the ASN, the provider and the attack IPs.

Real example

In October 2026 a site protected by SeenSecure received, within minutes, login attempts from more than 45 different IPs, all from the same proxy provider. Each IP tried a dictionary username (admin, wpadmin, root…) only once. CAPTCHA and the browser fingerprint stopped them one by one; with this protection, at the fifth different attacker the whole provider is blocked and the rest of the attack never even reaches the form.

Configure it in Login & 2FA → Restricted accounts.

🛡️ Active Blocks

The Active Blocks section shows all currently active temporary and permanent blocks. It allows managing users and IPs that have been blocked for suspicious activity, offering options to manually unblock.

Blocks Table

The table includes the following columns:

  • User/IP: Blocked username or IP address.
  • Type: Permanent or Temporary, indicated with a color badge.
  • Reason: Reason for the block (failed login, login_blackname, etc.).
  • Attempts: Number of failed attempts recorded before the block.
  • Blocked Since: Block start date and time.
  • Expires: Expiration date (for temporary blocks).

Unblock

Each table row includes an "Unblock" button with confirmation. When clicked, it asks for confirmation before removing the block. This prevents accidental unblocks.

💡 Note: Temporary blocks expire automatically. Only permanent blocks require manual unblocking. Check this table periodically to maintain control over unauthorized access.

📊 Event History

The Event History logs all login security-related activities: successful and failed logins, temporary and permanent blocks, manual unblocks, and password changes. Provides filters and pagination for easy navigation.

Event Types

Login Success

Valid login. Logs user, IP, date/time, and country.

Login Failure

Access attempt with wrong credentials. Logs IP, attempted user, and date.

Temporary Block

IP temporarily blocked for exceeding the failed attempt limit.

Permanent Block

IP permanently blocked after multiple temporary blocks.

Unblock

Admin manually unblocked an IP or user.

Password Change

User changed their password. Logs user, IP, and date/time.

Available Filters

  • Event Type: Dropdown to select a single event type (or "All").
  • Username: Text field to filter by specific user.
  • IP Address: Text field to search events from a specific IP.

Pagination & Display

  • Rows per page: Selector with options 10, 20, 50, 100, 200.
  • Client-side pagination: Page navigation is handled in the browser without reloading.
  • Country flags: Flags are displayed from ISO country codes to identify the origin of events.
💡 Tip: Use combined filters to investigate specific incidents. For example, filter by IP + "Login Failure" to see all failed attempts from a suspicious address.

🔑 Password Policy

Requires a minimally strong password when creating or changing it, both on the password reset screen and on the WordPress user profile. The user sees in real time, as they type, which requirements are missing — without WordPress's original form being touched.

Configurable requirements

Each requirement is independent: only the ones you enable are required.

Requirement What it checks
Minimum length Minimum number of characters (4-64). Always active while the feature is on.
Uppercase At least one uppercase letter (A-Z).
Number At least one digit (0-9).
Symbol At least one character that isn't a letter or number (! @ # $ % ...).

Where it applies

It's checked on the two native WordPress screens where a password is set: the password reset screen (after requesting "Lost your password?") and the password change on the user profile in the WordPress dashboard. If the password doesn't meet the enabled requirements, WordPress rejects the save with a message stating exactly what's missing.

💡 Tip: The on-screen notice is generated with JavaScript over WordPress's own password field, so it keeps working even if you change theme or registration plugin — it doesn't depend on any custom form.
⚠️ Depends on the Firewall (WAF): Just like the other protections in this section (CAPTCHA, lockouts...), the actual requirement is only applied if the main Firewall is in Protection mode. If the WAF is in Monitor mode or off, the on-screen notice keeps showing as guidance, but WordPress won't reject the weak password.

🔓 Breached Passwords (PRO)

When a password is created or changed (in the profile, when adding a user or with "Lost your password?"), SeenSecure checks whether it has already appeared in real data breaches and, if so, rejects it: "This password has appeared 23,547 times in data breaches… Choose another one." It uses Have I Been Pwned's public Pwned Passwords service (over 900 million passwords).

  • The world's reference service: Have I Been Pwned is built into Firefox (Mozilla Monitor) and the 1Password password manager, and more than 40 governments, such as the UK National Cyber Security Centre (NCSC), Australia and Germany (CERT-Bund), use it to monitor their domains.
  • The password never leaves your site (k-anonymity): its SHA-1 hash is computed and only its first 5 characters are sent, shared by hundreds of passwords; the comparison happens on your server and responses are padded so not even their size gives anything away.
  • If the service does not respond, the password is allowed: it never blocks anyone because of a third-party outage.
  • Options: reject if it appears at least N times (1 = any breached password, recommended) and which roles it applies to (none checked = all).
  • Test a password: from the card you can check any password without saving it.

It complements the Password Policies: a password can meet every requirement ("Summer2023!") and still be on the lists used by credential-stuffing attacks. Configure it in Login Security → Password Policies. The service is free and needs no key.

🔧 Troubleshooting

A legitimate user or IP got blocked

Go to Login Security → Active Lockouts: you'll see the full table with the reason, number of attempts, and whether the block is temporary or permanent. Temporary blocks expire on their own; permanent ones each have their own "Unblock" button (with a confirmation step, to prevent accidental unblocks). No need to wait or touch the general configuration to free up a single person.

My team keeps getting locked out while testing login

Check the Event History first: filter by your IP to confirm how many real failed attempts you're generating. If the block comes from a restricted username (reason login_blackname), you're probably testing with a generic test username (admin, test, etc.) — always use a real username for testing. If it's from normal failed attempts, raise the Lockout Threshold or add your IP to the Firewall whitelist so it doesn't count against the limit.

Frequently Asked Questions

Do temporary blocks need me to do anything? No, they expire automatically. Only permanent ones (typically from a restricted username) need manual unblocking from Active Lockouts.

What's the difference between a lockout from failed attempts and one from a restricted username? The first counts normal failed login attempts; the second specifically triggers when someone tries usernames already blocked by default (like "admin"), and its per-IP attempt threshold is configured separately.

Can I see where login attempts are coming from? Yes, the Event History and the detected-attempts summary show the IP, date/time, and country flag for each attempt's origin.

Can Anti Session Hijacking close the session of someone traveling or using a VPN? If the mode is set to "Block", yes — that's its expected behavior: it closes that specific session as soon as it detects a country change, which is exactly what happens when traveling or switching VPNs. It's not a ban: they just need to log in again normally. If you'd rather just get the alert without closing the session, use "Monitor" mode instead.

Does Password Policy affect passwords that already exist? No, it's only checked when creating a new account or actively changing a password. An old password that doesn't meet the current requirements still works to log in until it's changed.

Why isn't it requiring uppercase/number/symbol even though I enabled it? Check that the main Firewall (WAF) is in Protection mode: if it's in Monitor mode or off, the actual requirement is disabled (the on-screen notice keeps showing, but only as guidance).