Skip to main contentSkip to footer

Looking for an overview? Visit the Plugin landing page for features, pricing, and install steps. This page is the technical reference.

WordPress Plugin — ReportedIP Hive (Full Edition)

Two editions exist — make sure you are reading the right one. This page documents ReportedIP Hive (Full Edition) — distributed via GitHub Releases, includes 2FA, thirteen attack sensors, multisite support, WooCommerce integration and managed mail / SMS relay. Looking for the lightweight WordPress.org edition without 2FA or tiers? Read the Hive Light docs instead. The two plugins share the same text domain — install only one of them per site.

ReportedIP Hive is a community-powered WordPress security plugin. It turns every protected site into a sensor: when one site is attacked, the hive learns and every other site can refuse the attacker before the first request lands. Real-time threat intelligence, thirteen attack sensors, four-method 2FA, progressive block escalation. Open source, published under GPLv2+ on GitHub.

Current version: 2.0.11. Requirements: WordPress 5.0+ (tested up to 6.9), PHP 8.1+. Network: true — installs network-wide on WordPress multisite. Works standalone (Local Shield) or connected to the ReportedIP API (Community Network).
Source code & distribution: github.com/reportedip/reportedip-hive — issues, pull requests, and changelog are public. The Full Edition does not ship on WordPress.org because of the managed mail / SMS relay (paid quotas) and the multisite tier system, both of which conflict with wp.org's "no upsell, no service tie-in" guidelines. Updates ship via GitHub Releases (auto-detected by the built-in Plugin-Update-Checker every 12 hours). Pinned tag format vX.Y.Z.

Installation

1

Download the Plugin

Grab the latest reportedip-hive.zip from the GitHub Releases page, or download it from your Dashboard.

2

Install & Activate

Go to Plugins → Add New → Upload Plugin in your WordPress admin, select the ZIP file, click Install Now, then Activate.

3

Run the Setup Wizard

After activation the eight-step setup wizard launches automatically. It walks you through the operating mode, the API key, brute-force thresholds, the 2FA roster, retention rules, the hide-login slug and the optional auto-footer.

4

Stay Updated

The built-in update checker (Plugin Update Checker v5.6+) polls GitHub Releases every 12 hours. New versions appear in the WordPress Plugins screen like any other plugin update — no manual reinstall needed. Pinned tag format: vX.Y.Z.

Setup Wizard (9 steps)

The wizard runs on first activation and can be re-launched any time from the plugin settings. Each step persists immediately, so you can stop and resume.

StepWhat it configures
1. WelcomeIntro, link to the docs and optional one-click import of an existing JSON settings export.
2. ConnectOperating mode (Local Shield / Community Network), API key with live validation against reportedip.de.
3. ProtectionLogin / comment-spam / XMLRPC / 404-scan / REST-burst thresholds and timeframes, report-only toggle, block-duration strategy (fixed length vs. progressive ladder).
4. 2FAEnable / disable each of the four methods (TOTP, Email, SMS, WebAuthn), enforce roles, grace days, trusted-device expiry.
5. PrivacyData retention, auto-anonymisation, log level, detailed-logging toggle.
6. NotificationsRecipients (comma-separated, validated via is_email()), From-Name / From-Email for transactional mail, optional sync of the contact list back to the reportedip.de account.
7. LoginHide-login URL slug (3–50 chars, blacklisted slugs rejected), response mode for the old /wp-login.php (block page or 404).
8. PromoteOptional auto-footer banner, variant (badge / shield / banner / stat) and alignment.
9. DoneCompletion summary, link to the dashboard.

Operating Modes

Two modes — switch between them at any time without losing local data.

Feature Local Shield Community Network
All thirteen attack sensorsYesYes
4-method 2FA + trusted devices + recovery codesYesYes
Progressive block escalationYesYes
Hide-login URLYesYes
IP reputation lookups against the hiveNoYes (via API)
Anonymised attack reports back to the communityNoYes (automatic)
API key requiredNoYes (free tier available)
Data leaves your serverNeverOnly attacker IP + threat category + timestamp
Recommendation: Use Community Network mode for the best protection. Your site benefits from threat intelligence reported by thousands of other sites, and you help protect the community in return.

What you get on each tier

The Hive plugin itself is fully functional on the Free tier — local protection, all thirteen sensors, all four 2FA methods. Paid tiers bundle managed delivery infrastructure (mail and SMS) and higher Community-Network quotas. See the Pricing page for the full comparison and to upgrade.

  Free Contributor Professional Business Enterprise
Price / month (incl. VAT)0 €0 €14.90 €39.00 €From 663 €
Price / year (≈ 17 % discount)0 €0 €149 €389 €Custom
Minimum termMonthlyMonthly12 months
API checks / day1,0005,00025,000100,000Unlimited
Decoy-path detect-and-report (auto-managed .htaccess, since 2.0.11)YesYesYesYesYes
Coordinated-attack hardening mode (since 2.0.8)YesYesYes
Reports / day502001,0005,000Unlimited
Community threat feed (daily blacklist)YesYesYesYes
Domains per licence11315Unlimited
2FA mails / month (managed SMTP)5002,500Unlimited (fair use)
2FA SMS / month (managed worldwide relay)2575Custom
Prepaid SMS bundles (50 / 200 / 500 SMS @ 14.90 / 49.90 / 99.90 € incl. VAT)YesYesYes
Prepaid mail bundles (1k / 5k / 25k mails @ 4.90 / 14.90 / 49.90 € incl. VAT)YesYesYes
Custom-branded mail templatesYesYes
2FA usage reports & analyticsYesYesYes
Configurable 2FA policies per user roleYesYesYes
Restrict user login times (per role / per user)YesYes
Bulk operations & analyticsYesYesYes
Multi-site dashboard on reportedip.deYesYesYes
White-label (setup wizard, 2FA pages, mail templates)YesYes
WooCommerce Frontend-2FA (themed in-storefront challenge)YesYesYes
WooCommerce complete integration (white-label templates, Subscriptions / Memberships audit)YesYes
Full WP-CLI scriptingYesYes
GDPR data-export toolYesYes
Weekly security report (PDF by mail)Yes (weekly)Yes (daily optional)Yes
Cloud backup of Hive settings30 d90 d1 year
Log retention30 d30 d90 d1 yearConfigurable
Support SLACommunityCommunityEmail 48 hPriority 12 hPhone 4 h
Custom AVV / DPAYes

Business is multi-bookable. Every Business figure above is per licence. Book Business x2, x5, x10 or x20 at checkout (or change it later in the Stripe Customer Portal) and the per-day checks/reports, the monthly 2FA mail/SMS allowance and the domain count all scale with your licence count — e.g. x5 = 75 domains and 500,000 checks/day. A volume discount applies automatically from x2 upwards. PRO stays single-licence; Enterprise figures are unlimited (fair use) and are never multiplied.

Bundle consumption order (PRO and Business): first the monthly included allowance (25 SMS / 500 mails on PRO, 75 / 2,500 on Business), then the prepaid bundle balance. Once both are exhausted the API returns HTTP 429 and Hive falls back to local wp_mail() for mail (or hard-caps SMS) — other 2FA methods stay operational. Bundle credits never expire. Stripe uses tax_behavior = inclusive for the gross-priced bundles (PAngV compliant); Reverse Charge / OSS is handled automatically by Stripe Tax.

Multi-site management. On Professional and above the Hive plugin can register up to 3 (PRO) or 15 (Business) protected domains under one licence — and booking Business x2–x20 raises that to 30–300 domains. Cross-site dashboard, central whitelist, single billing — manage them all from your reportedip.de dashboard.
What changed in 2.0.7 – 2.0.11. Four release-line improvements shape the current tier matrix:
  • 2.0.7 — Internal API-budget refactor. The internal hourly rate-limiter is now split into three independent buckets (reputation lookups, report submissions, meta / quota sync) — a bot storm on one bucket can no longer freeze the others. Per-bucket caps scale automatically with the active tier (the busier the daily quota, the larger the spike budget). The legacy "Max API calls per hour" setting defaults to 0 = auto / tier-bound; admins keeping that to 0 get sensible defaults out of the box, the daily quota stays the visible cap.
  • 2.0.8 — Coordinated-attack hardening (PRO+). When the network sees ≥ 3 IPs producing ≥ 20 failed logins per minute, Hive tightens thresholds for 60 minutes: brute-force 5 / 15 min → 2 / 5 min, reputation block 75 % → 60 %. Realtime trigger via wp_login_failed (60 s debounce), cron-sweep as safety net. WP-CLI: wp reportedip hardening status|activate|deactivate.
  • 2.0.9 — Decoy-path attack block (Free). Bait-path sensor on every tier: a single request against .env.backup, wp-config.old.php, db-dump-master.sql.php, admin-shell-console.php etc. is logged and forwarded to the community queue. No physical decoy files on disk. Extend the bait list via filter reportedip_hive_decoy_paths. (Block behaviour refined in 2.0.11 — see below.)
  • 2.0.10 — Decoy-path bugfix. The sensor now honours report_only_mode (logs the event without sending the 403 + exit) and matches bait names hidden behind subdirectory prefixes (/site-a/.env.backup) on Multisite subdir installs via a basename fallback.
2.0.11 — Decoy-path becomes detect-and-report, plus auto-managed .htaccess. The sensor no longer calls the local IP-block path: a single bait-path hit still returns one 403 and queues a high-severity community report, but the source IP is not banned for 24 h locally. This prevents legitimate backup plugins (a stray wp-config.old.php), admin testing or stale crawlers from locking a site out of its own traffic. Apache .htaccess is now auto-managed via a marker block (# BEGIN ReportedIP Hive Decoy / # END ReportedIP Hive Decoy) placed above # BEGIN WordPress — that is the only position where a real bait file on disk (.env.backup left by Composer, etc.) is reliably routed through WordPress instead of being served directly by Apache. The writer uses WP-Core insert_with_markers(), self-heals once per hour on admin_init, and exposes Auto-managed / Read-only status in the Settings box. Server-config snippets in Settings now rewrite to /index.php (Apache: RewriteRule ^ /index.php [L,QSA]; nginx: rewrite ^ /index.php last;) — never [F,L] or return 403, which would skip PHP entirely and silence both the local log and the community report. Migration v7 cleans up stale decoy_pathblock:* rows in wp_reportedip_hive_blocked from 2.0.9 / 2.0.10 and removes the now-defunct reportedip_hive_decoy_block_hours option.

5-Layer Defence

Hive applies its checks in order — each layer can short-circuit the request before it reaches the next. Hooked on init at priority 1 so that other plugins do not run for a blocked IP.

  1. Whitelist — trusted IPs and CIDR ranges are always allowed (your office, monitoring services, …).
  2. Local block list — IPs you have blocked manually, or that exceeded local thresholds. Stored in wp_reportedip_hive_blocked.
  3. Attempt counters — login, comment, XMLRPC, REST-burst and 404-scan counters trigger an automatic block once the threshold is reached.
  4. Community reputation — in Community Network mode, IPs with confidence ≥ threshold are blocked at the edge.
  5. 2FA challenge — protected accounts must complete a second factor to log in.

The Thirteen Attack Sensors

Every sensor can be toggled and tuned independently in Settings → Protection.

SensorWhat it watchesDefault threshold
Brute-force loginFailed logins per IP via wp_login_failed.5 in 15 min
Comment spamComment posts per IP via comment_post.5 in 60 min
XMLRPC abuseXMLRPC calls per IP via xmlrpc_call.10 in 60 min
REST-API burstAnonymous REST requests per IP. Cookie-banner endpoints are bypassed by default (real-cookie-banner, complianz, borlabs-cookie, cookie-law-info).240 in 5 min
404 / scan detectorHigh-rate 404s plus instant trigger on honeypot paths (.env, .git/config, wp-config.php.bak, …).12 in 2 min
Decoy-path detect-and-reportBait paths (.env.backup, wp-config.old.php, db-dump-master.sql.php, admin-shell-console.php, …). A single hit returns one 403 and queues a high-severity community report — but does not trigger a local 24 h IP ban, so a backup plugin writing wp-config.old.php or an admin testing the bait URL cannot lock the site out of its own traffic. Apache .htaccess is auto-managed (marker block # BEGIN ReportedIP Hive Decoy placed above # BEGIN WordPress via insert_with_markers()) so real bait files on disk are routed through WordPress instead of being served directly by Apache. Nginx admins get a copy-paste rewrite ^ /index.php last; snippet in Settings. Filter reportedip_hive_decoy_paths extends the bait list.1 hit = 403 + community report
User enumerationBlocks ?author=N, /wp-json/wp/v2/users, oEmbed user lookups; equalises invalid-user vs. wrong-password error responses.Always on (when enabled)
App-password monitorThrottles application_password_failed_authentication; prevents Basic-Auth bypass of 2FA.5 in 15 min
Geo / ASN anomalyCompares country and ASN at successful login against a 90-day rolling history; optionally revokes trusted-device tokens on anomaly.≥ 1 prior login required
Password strengthEnforces minimum length and character-class mix on enforced roles; optional Have-I-Been-Pwned k-anon check (SHA-1 prefix only).8 chars + classes
Hide login URLCustom slug (default wp-login.php); the original URL returns a block page or a 404.Slug 3–50 chars
Block escalationProgressive ladder — repeat offenders pay more on each cycle.5 m → 15 m → 30 m → 24 h → 48 h → 7 d
WooCommerce loginWooCommerce account-form failures count toward the brute-force counter.Inherits brute-force limit

Progressive Block Escalation

Repeat offenders pay more. The default ladder is 5 min → 15 min → 30 min → 24 h → 48 h → 7 d. After 30 days clean the counter resets to step 1. First-time tripping legitimate visitors (CGNAT, fat-fingered admins, mobile-network egress) recover in minutes; persistent attackers reach the 7-day step.

The ladder, the reset window and the master toggle live under Settings → Blocking → Progressive blocking. The wizard's Protection step exposes the master toggle so fresh installs are escalation-aware from the first save. The fixed block_duration setting still applies when the ladder is toggled off. Sub-hour granularity is provided by ReportedIP_Hive_Database::block_ip_for_minutes().

Two-Factor Authentication (2FA)

Four methods are supported and can be combined per user. Recovery codes are generated on first setup. Secrets are encrypted at rest (libsodium with an OpenSSL fallback).

  • TOTP — RFC 6238 (6 digits, 30-second window). Works with Google Authenticator, Authy, 1Password, Bitwarden, …
  • Email — six-digit OTP via the configured mail provider; rate-limited (3 codes per 15 min, 5 verify attempts per code, 60 s resend cooldown).
  • SMS — six-digit OTP via the managed reportedIP SMS relay (Professional plan and up; see below). Phone number is encrypted at rest.
  • WebAuthn — passkeys, security keys (YubiKey), platform authenticators (Touch ID, Face ID, Windows Hello). In-house CBOR parser, no external dependency.
  • Trusted devices — opt-in remember-this-device tokens with configurable expiry (default 30 days). Stored in wp_reportedip_hive_trusted_devices as SHA-256 hashes.
  • Recovery codes — 10 single-use xxxx-xxxx codes; low-codes warning at ≤ 3 remaining.

2FA brute-force protection

The 2FA verifier ladder is 3 → 30 s, 5 → 5 min, 10 → 30 min, 15 → 1 h. When the count reaches the top step the IP is graduated to the central auto_block_ip() path (event 2fa_brute_force) which trips progressive escalation and Community-mode reporting like any other sensor.

Headless 2FA REST

For app integrations the plugin exposes three routes under namespace reportedip-hive/v1:

  • POST /2fa/challenge — username + password → challenge token + enabled methods (20 req / 5 min per IP).
  • POST /2fa/verify — token + method + code → sets the auth cookie (30 req / 5 min per IP).
  • GET /2fa/methods — introspect active methods for the current user.

WooCommerce Frontend Login

Hive's frontend 2FA stays inside your active storefront theme — customers logging in through [woocommerce_my_account], the classic checkout or the WooCommerce Cart / Checkout blocks complete their second factor on a themed page. The cart and checkout state survives the redirect roundtrip, the trusted-device cookie is shared with the wp-login flow.

  • Configuration path2FA → Frontend login for WooCommerce.
  • Configurable slugs — challenge slug (default reportedip-hive-2fa) and setup slug (default reportedip-hive-2fa-setup); both editable, conflict-checked, and rewrite rules flush automatically when changed.
  • Tier downgrade — soft-disable on Free and Contributor plans; settings, slug choices and onboarding state are preserved, no data loss when re-upgrading.
  • Conflict detection — Hive surfaces an admin notice when Solid Security, the WP Two-Factor plugin or Wordfence 2FA owns the login form, and disables the frontend challenge to avoid double-prompts.
  • Plan availability — Professional and above. The free WooCommerce login-failure sensors (woocommerce_login_failed, woocommerce_checkout_login_form_failed_login) remain on every plan and continue to feed the brute-force counter.

Mail and SMS Delivery

The mail layer runs through a pluggable provider contract (ReportedIP_Hive_Mailer). The default provider is WordPress wp_mail(); integrators can swap in their own without touching the rest of the plugin. SMS 2FA is a Professional feature delivered exclusively through the managed reportedip.de relay — no own SMS account or carrier contract required. It is configured automatically with a paid plan; enable it under Settings → 2FA → SMS.

Configuration Overview

All settings live under ReportedIP Hive → Settings. The most important defaults:

SettingDefaultDescription
operation_modeLocal ShieldLocal Shield or Community Network.
block_threshold75 %Minimum confidence score to block an IP (Community mode).
login_threshold / _timeframe5 / 15 minFailed-login attempts per IP before auto-block.
comment_spam_threshold / _timeframe5 / 60 minComment posts per IP before auto-block.
scan_404_threshold / _timeframe12 / 2 min404s per IP before scanner-block.
xmlrpc_threshold / _timeframe10 / 60 minXMLRPC requests per IP before auto-block.
rest_burst_threshold / _timeframe240 / 5 minAnonymous REST requests per IP. Consent-banner routes bypassed.
block_duration_hours24 hFixed-length block (used when the ladder is off).
block_escalation_enabled + block_ladder_minutesOn — 5,15,30,1440,2880,10080Progressive ladder (minutes per step).
report_modeActiveactive (block) or report_only (log without blocking).
data_retention_days30 daysHow long security logs are kept before automatic deletion.
auto_anonymize_days7 daysAnonymise IP and user-agent on log rows older than N days.
cache_duration / negative_cache_duration24 h / 2 hETag cache TTL for positive / negative reputation lookups.
max_api_calls_per_hour100Soft cap to spread API usage over the day.
2fa_enforce_roles(empty)Comma-separated roles with mandatory 2FA.
2fa_grace_days7Days before enforcement actually locks unenrolled users out.
2fa_trusted_device_days30Trusted-device token expiry.
hide_login_enabled / _slug / _response_modeOff — — block_pageCustom wp-login slug; old URL returns block page or 404.

Database Tables

Created on activation, prefixed wp_reportedip_hive_. Schema version 3, with idempotent migration on every plugin update.

  • logs — security events, JSON details, severity, reported-flag.
  • whitelist — trusted IPs and CIDR ranges; expiry optional.
  • blocked — active blocks (manual / automatic / reputation), with blocked_until.
  • attempts — per-IP counters per attempt type, with first/last timestamps.
  • api_queue — pending and failed reports to the community API; retry logic.
  • stats — daily aggregates for the dashboard charts (7- and 30-day trends).
  • trusted_devices — 2FA device tokens (SHA-256 hashes), IP and device name, expiry.

Frontend Shortcodes & Auto-Footer

Embed a small "protected by Hive" badge anywhere on the site. All shortcodes render a single <rip-hive-banner> web component and pull live numbers from a 6-hour transient cache (no API call per page view).

  • [reportedip_badge] — small badge (default protect tone).
  • [reportedip_stat] — single statistic (default trust tone).
  • [reportedip_banner] — wide banner (default community tone).
  • [reportedip_shield] — shield icon (default contributor tone).

Common attributes: stat (e.g. attacks_30d, reports_total), tone (protect / trust / community / contributor), color, background, label, intro. The auto-footer in the wizard uses the same component with a configurable variant and alignment.

WP-CLI Reference

The 2FA tooling is fully scriptable. Available under wp reportedip 2fa …:

wp reportedip 2fa status [--user=<id>]
wp reportedip 2fa enable <user_id> --method=<totp|email|sms|webauthn> [--secret=<base32>]
wp reportedip 2fa disable <user_id> [--method=<m>]
wp reportedip 2fa reset <user_id>
wp reportedip 2fa enforce --role=<role> [--remove]
wp reportedip 2fa audit [--user=<id>] [--since=<date>]
wp reportedip 2fa cleanup

Cache-Plugin Compatibility

Since 1.5.2 the blocked-page response defines DONOTCACHEPAGE, DONOTCACHEDB and DONOTCACHEOBJECT (respected by WP Rocket, W3 Total Cache, WP Super Cache and LiteSpeed Cache) and emits explicit Cache-Control: no-store, no-cache, must-revalidate, max-age=0, Pragma: no-cache plus the WordPress core nocache_headers() set. A single blocked attacker can no longer pollute the page cache with a 403 that legitimate visitors would otherwise receive until the cache expires.

Filters and Action Hooks

  • apply_filters('reportedip_hive_external_url', $url, $context) — replace any of the external URLs (privacy policy, registration, FAQ, …).
  • apply_filters('reportedip_hive_rest_bypass_routes', $routes) — extend the list of REST-route prefixes that bypass the burst monitor (cookie-banner integrations).
  • apply_filters('reportedip_hive_scan_paths', $paths) — extend the honeypot path list for the scan detector.
  • do_action('reportedip_hive_ip_blocked', $ip, $reason) — fired when an IP is blocked.
  • do_action('reportedip_hive_report_queued', $ip, $category) — fired when a report is enqueued for the API.

Frequently Asked Questions

The questions we get most often. Each answer links back to the relevant section above where appropriate.

General

What is Hive, and how does it relate to ReportedIP?

ReportedIP Hive is the WordPress plugin you install on your site. ReportedIP (reportedip.de) is the central service that aggregates threat intelligence. Hive can run completely standalone (Local Shield) or talk to the service (Community Network) — both are first-class modes.

Do I need an account to use the plugin?

No — Local Shield works without any account or API key. You only need a free ReportedIP account if you want to enable Community Network, which adds reputation lookups against the hive and shares anonymised attack reports back.

What does it cost?

The plugin itself is free under GPLv2+. Local Shield never requires a paid plan. Community Network ships with a free tier; higher tiers raise the daily check / report quotas. See the Dashboard for current quotas.

Is the plugin available on WordPress.org?

There are two editions. Hive Light is published on WordPress.org under the slug reportedip-hive — brute-force login protection plus optional community lookup, no 2FA, no upsell. The Full Edition documented on this page ships via GitHub Releases with one-click updates handled by the built-in Plugin-Update-Checker. The reason for two editions: wp.org guidelines disallow upsell, managed paid relays and multisite tier systems — all features the Full Edition relies on. See the Hive Light docs for the wp.org-distributed plugin. Important: do not install both plugins on the same site — they share the same text domain and class prefix.

Where is the source code? Can I audit it?

Yes — the full source lives at github.com/reportedip/reportedip-hive. Issues, pull requests, CHANGELOG and CI runs are all public.

Installation & Setup

How do I install the plugin?

Download reportedip-hive.zip from the latest GitHub release, then in WordPress: Plugins → Add New → Upload Plugin, select the ZIP, Install Now, Activate. The 8-step setup wizard launches automatically.

I skipped the setup wizard — how do I run it again?

Settings → ReportedIP Hive → top of the page has a "Re-run setup wizard" link. The wizard is non-destructive: it shows the current values as defaults so you can step through and only change what you need.

How do I switch between Local Shield and Community Network?

Settings → Connection → Operating Mode. No data is lost when you switch. Switching to Community Network requires a valid API key.

Can I import settings from another site?

Yes — Settings → Import / Export. The export is JSON, capped at 512 KB upload. API keys and 2FA secrets are not included for security; everything else (thresholds, ladders, whitelist, hide-login slug) is portable.

How do updates work?

Plugin Update Checker v5.6+ polls GitHub Releases every 12 hours. New versions appear inside Plugins like any other update — one-click install. Tag format must be vX.Y.Z; the release.yml workflow validates header + constant + readme stable-tag.

Modes & Sensors

What exactly is shared with the community when I am in Community Network mode?

Three things per attack: the attacker IP, the threat category (e.g. brute-force, comment-spam, XML-RPC, scanner) and a timestamp. Plus the API key of your site so the report is attributable to a reporter. Nothing else: no usernames, no passwords, no comment content, no end-user data, no site URLs in the payload.

What are the thirteen sensors and can I disable individual ones?

See "The Thirteen Attack Sensors" above for the full list and defaults. Yes — every sensor has a master toggle and threshold/timeframe knobs in Settings → Protection. You can also disable an entire sensor without disabling the rest.

What is "report-only mode"?

The plugin logs everything but blocks nothing. Useful when you tune thresholds on a busy site and want to see what would have been blocked before flipping the switch. Settings → Protection → Report-only mode.

How does progressive block escalation work?

Default ladder: 5 min → 15 min → 30 min → 24 h → 48 h → 7 d. Each repeat block within the reset window (default 30 days) advances one step. After 30 days clean the IP starts at step 1 again. CGNAT and fat-fingered admins recover in minutes; persistent attackers reach 7 days. Toggleable; falls back to fixed block_duration when off.

What is the "hide login URL" feature?

It replaces /wp-login.php with a custom slug (3–50 chars, blacklisted slugs rejected). Old URL returns either a Hive block page or a vanilla 404 — your choice. REST, AJAX, WP-CLI and password-reset flows are bypassed automatically so they keep working. Reduces the attack surface dramatically against scripted brute-forcers.

When Hide Login is active, repeated direct hits on the old /wp-login.php from one IP are treated as a scan and blocked on the standard escalation ladder. A single accidental visit stays harmless — only a pattern triggers a block. Tune the threshold or turn the block off under Settings → Hide Login.

2FA

Which 2FA methods does Hive support?

Four: TOTP (RFC 6238 — Google Authenticator, Authy, 1Password, Bitwarden, …), Email OTP, SMS OTP (via the managed relay, Professional plan), WebAuthn (passkeys, YubiKey, Touch ID, Face ID, Windows Hello). Plus single-use recovery codes and trusted-device tokens.

Can I enforce 2FA for some users only?

Yes — pick the roles in Settings → 2FA → Enforced roles. Enforced users get a 5-step onboarding wizard at first login, with a configurable grace period (default 7 days) before the lockout kicks in.

I lost my phone / authenticator — how do I get back in?

Use one of the ten recovery codes you saved during 2FA setup. If those are also lost, an administrator can reset 2FA for any user under Users → Two-Factor. As an absolute last resort: wp reportedip 2fa reset <user_id> via WP-CLI / SSH.

How long does a "trusted device" stay trusted?

Configurable; default 30 days. The token is a SHA-256 hash stored in wp_reportedip_hive_trusted_devices alongside the IP and a device name. The geo-anomaly sensor can revoke trusted-device tokens automatically on a country/ASN change.

Does WebAuthn work on all browsers?

Modern Chrome/Edge/Safari/Firefox on macOS, Windows, iOS, Android — yes. WebAuthn requires HTTPS (or localhost for dev). Older or hardened browsers without WebAuthn fall back to TOTP/Email/SMS automatically.

Can I integrate 2FA into a headless / mobile app?

Yes — the REST namespace reportedip-hive/v1 exposes POST /2fa/challenge, POST /2fa/verify and GET /2fa/methods. Throttled per IP (20 / 30 / unlimited per 5-minute window).

Performance & Compatibility

Does Hive work with WP Rocket / W3 Total Cache / WP Super Cache / LiteSpeed?

Yes — since 1.5.2 the blocked-page response sets DONOTCACHEPAGE, DONOTCACHEDB and DONOTCACHEOBJECT plus explicit Cache-Control: no-store, no-cache, must-revalidate, max-age=0, Pragma: no-cache and the WordPress core nocache_headers() set. A blocked attacker can no longer pollute the page cache.

Does it work behind Cloudflare?

Yes. The plugin reads CF-Connecting-IP first, then falls back to X-Forwarded-For and REMOTE_ADDR. Whitelist your origin's monitoring IPs if you proxy a status page through Cloudflare.

What about the WordPress block editor (Gutenberg) firing 50+ REST calls?

Since 1.2.2 logged-in users skip the global REST-burst monitor; only anonymous bursts count. The scanner-path match still applies (so Gutenberg cannot accidentally probe .env). Make sure you are running 1.2.2 or newer.

How do I keep API usage low?

The ETag cache holds positive lookups for 24 h and negative lookups for 2 h by default. Crank both up if you have a calm site. The dashboard exposes the live quota and the queue so you can see whether you are hitting the limit. Cron-driven batch reporting (every 15 min) coalesces individual events.

Will Hive slow down my site?

The block check is a single indexed query on wp_reportedip_hive_blocked per request, hooked at init priority 1. The whitelist is cached in memory per request. Reputation lookups are async: the public page is rendered first, the report is enqueued and shipped on the next cron tick.

Privacy & GDPR

Is the plugin GDPR compliant?

Yes — Local Shield never sends data anywhere, Community Network sends only the three fields above, user-agents are truncated to 50 characters, and IP addresses can be auto-anonymised after a configurable number of days. The full data-processing breakdown is in our privacy policy.

Do I need to mention Hive in my own privacy policy?

Yes if you run Community Network mode — disclose the use of Hive and the transmission of attacker IP / category / timestamp to reportedip.de. If you only run Local Shield, no transmission happens, but you still process IPs for security purposes (Art. 6 (1)(f) GDPR), which is worth a sentence in your policy.

What happens to my data if I uninstall?

Uninstall drops all wp_reportedip_hive_* tables and removes all reportedip_hive_* options. Reports already in the community database remain — they are not personally identifiable to your site (only the API-key hash links them).

Customisation & Extension

Cookie-banner / consent endpoint visitors get blocked — how do I extend the bypass list?

Since 1.5.0 the four common namespaces (real-cookie-banner, complianz, borlabs-cookie, cookie-law-info) are bypassed by default. For a custom stack, hook the filter:

add_filter('reportedip_hive_rest_bypass_routes', function ($routes) {
    $routes[] = '/my-consent-plugin/v1';
    return $routes;
});
How do I add my own honeypot paths to the scan detector?

Hook reportedip_hive_scan_paths:

add_filter('reportedip_hive_scan_paths', function ($paths) {
    $paths[] = '/.aws/credentials';
    return $paths;
});
Can I write my own mail provider?

Yes — implement interface-mail-provider.php for mail and register it via the mailer filter (reportedip_hive_mail_provider). SMS, by contrast, is delivered exclusively through the managed reportedip.de relay (Professional plan and higher); there is no self-hosted SMS provider to configure.

Where is the data of the front-end shortcodes coming from?

A 6-hour transient cache. Keys: attacks_30d, attacks_total, blocked_active, whitelist_active, logins_30d, spam_30d, api_reports_30d, reports_total. The shortcodes never call the API per page view.

Quotas, Plans & Account

What does each role get?

See the Authentication docs for the full table. Short version: free (1,000 checks / 50 reports per day), contributor (5,000 / 200), professional (25,000 / 1,000), business (100,000 / 5,000), enterprise (unlimited), honeypot (unlimited).

The dashboard shows a queue backlog — what should I do?

Open Settings → API Queue. The "Retry" button (1.2.4 fix) actually fires the API call now, not just resets the status. If retries fail because of a quota, raise the cache duration or upgrade your plan.

Can I run Hive on a multisite / network install?

Yes. Each subsite has its own settings and its own wp_*_reportedip_hive_* tables. The API-key model is per-subsite by default, which keeps reporters distinguishable.

Troubleshooting

Plugin does not block any IPs

Check whether Report-Only Mode is enabled — it logs threats without blocking. Also verify that the block threshold is not set too high (default 75 %) and that Auto-blocking is on (the duration strategy is disabled while auto-blocking is off).

API connection errors in Community Network mode

Ensure your server can make outbound HTTPS requests to reportedip.de. Some hosts block outgoing connections by default. Verify the API key on the Dashboard.

Cookie-banner visitors get blocked

Since 1.5.0 the four common consent namespaces (real-cookie-banner, complianz, borlabs-cookie, cookie-law-info) are bypassed by default. If your stack uses a different namespace, extend the bypass list via the reportedip_hive_rest_bypass_routes filter.

Legitimate users get blocked

Add their IP addresses or CIDR ranges to the local whitelist. Whitelisted IPs are never blocked, regardless of reputation.

High API usage / running out of checks

Responses are cached locally (with ETag) for 24 hours by default. If you are still running out of checks, increase cache_duration or upgrade your plan. Monitor the queue and quota on the Dashboard.

Locked out by 2FA

Use one of the recovery codes saved during 2FA setup. If those are lost, an administrator can reset 2FA for any user under Users → Two-Factor. As a last resort: wp reportedip 2fa reset <user_id>.

The block editor (Gutenberg) keeps getting throttled

The block editor fires 50+ REST calls in a few seconds. Since 1.2.2 logged-in users skip the global REST-burst monitor; only anonymous bursts count. Make sure you are running 1.2.2 or newer.

GDPR & Privacy

The plugin is designed with privacy in mind and is fully GDPR compliant.

  • Local Shield mode: No data leaves your server. All detection and blocking happens locally.
  • Community Network mode: Only attacker IP, threat category and timestamp are shared. No usernames, no passwords, no comment content, no end-user data.
  • User-agents are truncated to 50 characters before storage.
  • Automatic cleanup: Security logs are deleted after the configured retention period (default 30 days). Auto-anonymisation kicks in earlier (default 7 days).
  • Encryption at rest: TOTP secrets, WebAuthn credentials and SMS phone numbers are encrypted with libsodium (OpenSSL fallback).
  • No tracking: No cookies, no tracking pixels, no telemetry.
  • Open source: The full source code is published on GitHub — every line is auditable.

Changelog Highlights

  • 2.0.x — Network-wide multisite activation (Network: true), per-blog tier management, tier-upgrade banners, app-password & geo-anomaly monitors hardened, WooCommerce frontend 2FA opens to PRO+.
  • 1.5.2 — Cache-plugin compatibility on the 403 page; 2FA throttle graduates to real escalation block; init priority 1.
  • 1.5.1 — Blocking-tab clarity (Report-only > Auto-blocking > duration strategy); fixed-length and ladder editors swap inline.
  • 1.5.0 — Progressive block escalation (5 m → 7 d ladder); cookie-banner endpoints bypassed by default; 404/comment-spam defaults relaxed.
  • 1.2.4 — API-queue "Retry" button now actually fires the API call.
  • 1.2.0 — Seven new sensors: app-password monitor, REST-burst monitor, user-enumeration block, 404/scan detector, geo-anomaly, password strength, hide-login URL.
  • 1.1.0 — Central mailer with brand template.
  • 1.0.0 — Initial public release: IP blocking, 4-method 2FA, setup wizard, list tables.

Full history: CHANGELOG.md on GitHub.

Looking for the smaller edition?

ReportedIP Hive Light is the lightweight WordPress.org-distributed edition: brute-force login protection plus optional community IP reputation lookups. No 2FA, no tiers, no managed relay. Right choice for small sites and hobbyists. Read the Hive Light documentation or install directly from WordPress.org.
Security Focused
GDPR Compliant
Made in Germany
Back to Docs