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, sixteen 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, sixteen attack sensors including a Web Application Firewall, four-method 2FA, progressive block escalation and server-delivered, signed firewall rulesets. Open source, published under GPLv2+ on GitHub.

Current version: 2.1.4. Requirements: WordPress 5.0+ (tested up to 7.0), 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 ten-step setup wizard launches automatically. It walks you through the operating mode, the API key, brute-force thresholds, the firewall (WAF, verified-bot action, disposable-email mode, comment honeypot), 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 (10 steps)

The wizard runs on first activation and can be re-launched any time from the plugin settings. Each step persists immediately server-side on every navigation (Back included), so you can stop and resume without losing a setting.

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. FirewallWeb Application Firewall (enable / report-only), verified-bot action (flag or block spoofers), disposable-email mode (off / monitor / block) and the comment honeypot — all with safe defaults.
5. 2FAEnable / disable each of the four methods (TOTP, Email, SMS, WebAuthn), enforce roles, grace days, trusted-device expiry.
6. PrivacyData retention, auto-anonymisation, log level, detailed-logging toggle.
7. 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.
8. LoginHide-login URL slug (3–50 chars, blacklisted slugs rejected), response mode for the old /wp-login.php (block page or 404).
9. PromoteOptional auto-footer banner, variant (badge / shield / banner / stat) and alignment.
10. 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 sixteen 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 sixteen 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
Web Application Firewall — engine + baseline ruleset (since 2.1.2)YesYesYesYesYes
Priority Sync — advanced WAF rulesets (Paranoia Level 2/3) + live bot-IP / disposable feedsWeeklyDailyDailyDaily
Verified-bot detection (official IP ranges + FCrDNS)YesYesYesYesYes
Disposable-email blocking & comment honeypotYesYesYesYesYes
Security headers — basic trio (X-Content-Type-Options, X-Frame-Options, Referrer-Policy)YesYesYesYesYes
Advanced security headers (HSTS, Permissions-Policy, CSP builder, cross-origin isolation)YesYesYes
Protection & hardening score (dashboard gauges, A+–F grade)YesYesYesYesYes
Block-page reference codes (X-RIP-Ref)YesYesYesYesYes
MainWP integration (remote management)YesYesYesYesYes
Audit event trail (user-lifecycle log + CSV/JSON export, since 2.1.2)YesYes
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.1.0 – 2.1.4 — the firewall release. A complete firewall layer landed on top of the existing sensor and 2FA core:
  • 2.1.0 — MainWP integration & block-page reference codes. Hive is now remote-manageable from a MainWP dashboard (aggregate security-metrics sync and API-key provisioning) with no extra child plugin, authenticated through the MainWP Child channel — no IPs, usernames, secrets or the API key leave the site. Every blocked response now carries a correlatable reference code (e.g. WAF_SQLI-3F9A2B71), shown on the page and emitted as the X-RIP-Ref header; the incident token is a one-way hash of IP, reason and hour, so no personal data is exposed. The blocked page was rebuilt on the design system and fully translated.
  • 2.1.2 — Rule Delivery Framework + Web Application Firewall (Free engine, PRO depth). Server-delivered, versioned, Ed25519-signed, tier-staggered rulesets (waf, bot_signatures, disposable_domains, scan_paths) verified against a bundled public key before they are applied — a tampered or unreachable feed can never poison the rules, and a bundled baseline works fully offline. The request-inspecting WAF and its OWASP-Top-10 Paranoia-Level-1 baseline are free on every plan; Professional unlocks the deeper, frequently-updated Level 2/3 ruleset via Priority Sync. ReDoS-hardened and fail-open, with an optional pre-WordPress drop-in (Apache / PHP-FPM auto-config, nginx snippet) that blocks before WordPress loads.
  • 2.1.2 — More free sensors. Verified-bot detection (official IP ranges + forward-confirmed reverse DNS — genuine crawlers are never blocked), disposable-email blocking at registration (privacy relays pass through), an invisible comment honeypot, basic security headers, a dashboard protection & hardening score (A+–F grade) — all free. Professional adds advanced security headers (HSTS, Permissions-Policy, CSP, cross-origin isolation); Business adds the audit event trail (schema v9 adds the audit_log table).
  • 2.1.3 — Verified-bot IPv6 fix. The forward-confirmation now resolves AAAA records as well, so genuine crawlers connecting over IPv6 are no longer flagged as fake; facebookexternalhit is verified against Meta's published IP ranges instead of reverse DNS.
  • 2.1.4 — Firewall admin UX overhaul. The Overview tab is now a mini-dashboard (per-module status, 7-day activity counters, recent firewall event stream), every tab opens with a plain-language intro, and a new Server Setup tab gathers every web-server snippet in one place. Extended Protection setup is now verifiable — the status reports whether the guard actually executed for the current request. New specific WAF reason codes for SSRF, Log4Shell, PHP object injection, NoSQL, XXE, web-shell, CRLF and template injection.

6-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. Web Application Firewall — the active WAF ruleset is matched against the URI, query, body and user-agent; a hit is blocked through the shared, reference-coded 403 path. Whitelist- and content-author-aware to avoid false positives. An optional pre-WordPress drop-in can run this layer before WordPress even loads.
  4. Attempt counters — login, comment, XMLRPC, REST-burst and 404-scan counters trigger an automatic block once the threshold is reached.
  5. Community reputation — in Community Network mode, IPs with confidence ≥ threshold are blocked at the edge.
  6. 2FA challenge — protected accounts must complete a second factor to log in.

The Sixteen 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
Password sprayDistinct usernames attempted from the same IP (low-and-slow credential attacks).5 in 10 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
Web Application FirewallInspects the URI, query string, request body and user-agent against the active waf ruleset (SQLi, XSS, path traversal, command injection, LFI wrappers, SSRF, Log4Shell/JNDI, PHP object injection, NoSQL, XXE, web-shell uploads, CRLF, template injection). Engine + OWASP-Top-10 Paranoia-Level-1 baseline free on every plan; Professional unlocks the signed Level 2/3 rulesets via Priority Sync. ReDoS-hardened, fail-open, whitelist- and content-author-aware. Optional pre-WordPress drop-in blocks before WordPress loads.Paranoia-Level selectable
Verified bot detectionConfirms a request claiming to be Googlebot, Bingbot or another crawler genuinely originates from it — a DNS-free match against the crawler's official IP ranges first, then a forward-confirmed reverse-DNS fallback. Spoofers are flagged (default) or blocked; genuine crawlers are never blocked.Flag or block spoofers
Disposable-email blockingInspects the address at registration (WordPress + WooCommerce) against the disposable_domains list. Privacy relays (Apple Hide My Email, Firefox Relay, …) are a distinct category that passes through by default.Off / monitor / block
Comment honeypotAn invisible, screen-reader-excluded decoy field on the comment form; spam bots that fill every field are rejected with no CAPTCHA friction for real visitors.Always on (when enabled)
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().

Web Application Firewall & Rule Delivery

Since 2.1.2 Hive ships a request-inspecting Web Application Firewall. On init it matches the active waf ruleset against the URI, query string, request body and user-agent and blocks a hit through the shared, cache-safe, reference-coded 403 path. It is ReDoS-hardened (bounded PCRE backtracking, fail-open on a malformed rule), whitelist- and content-author-aware to avoid false positives, and adds roughly 4 µs of CPU per request with zero extra database queries when a persistent object cache is present.

The rules are not hard-coded in the plugin. They are delivered from the reportedip.de Rule API — server-delivered, versioned, Ed25519-signed and tier-staggered across four rulesets (waf, bot_signatures, disposable_domains, scan_paths). The plugin verifies every ruleset against a bundled public key before applying it and always falls back to a bundled baseline, so a tampered, oversized or unreachable feed can never poison your rules. New attack signatures reach all installations within hours, with no plugin release required.

  • Free on every plan — the WAF engine and the OWASP-Top-10 Paranoia-Level-1 baseline ruleset, fully usable offline in Local Shield mode from the bundled baseline.
  • Priority Sync (Professional and up) — the deeper, frequently-updated, signed Paranoia-Level-2/3 rulesets (obfuscation and bypass coverage) plus the live bot-IP-range and disposable-domain feeds. Free syncs the bundled baseline; Contributor weekly; Professional and above daily.
  • Extended Protection drop-in (optional) — a pre-WordPress auto_prepend_file guard that runs the WAF before WordPress loads. Apache (.htaccess) and PHP-FPM (.user.ini) are auto-configured; nginx and managed hosts get a php.ini / hosting-panel auto_prepend_file line or an nginx snippet. Off by default; removal always strips the directive before deleting the guard so a stale prepend can never fatal the site.
  • Reference codes — every block (WAF or sensor) carries a correlatable code such as WAF_SQLI-3F9A2B71, shown on the block page and emitted as the X-RIP-Ref header. A wrongly-blocked visitor quotes one short string that an admin matches in the logs; the token is a one-way hash of IP, reason and hour, so no personal data is exposed.

Configuration and live status live under the dedicated Firewall menu: an Overview mini-dashboard (per-module status, 7-day counters, recent firewall events), a WAF tab (engine / mode / Paranoia-Level selector), a Bot Verification tab, a Spam Defence tab (disposable-email + honeypot), a Rule Sync status view and a Server Setup tab that gathers every web-server snippet in one place.

Verified Bot Detection, Disposable-Email Blocking & Comment Honeypot

  • Verified bot detection (free). Confirms that a request claiming to be Googlebot, Bingbot or another crawler genuinely originates from it — a DNS-free match against the crawler's official IP ranges first (Priority Sync), then a forward-confirmed reverse-DNS fallback that resolves both A and AAAA records. Spoofers are flagged (default) or blocked; a genuine crawler is never blocked. facebookexternalhit is verified against Meta's published IP ranges.
  • Disposable-email blocking (free). Inspects the address on registration (WordPress and WooCommerce) against the throwaway-mail list. Three modes — off / monitor / block. Privacy relays (Apple Hide My Email, Firefox Relay, …) are a distinct category that passes through by default. The live list rides Priority Sync.
  • Comment honeypot (free). An invisible, screen-reader-excluded decoy field on the comment form; spam bots that fill every field are rejected with no CAPTCHA friction for real visitors.

Security Headers

Hardening response headers on every front-end request. Headers already sent by your server or another plugin are detected and left untouched.

  • Basic trio (free)X-Content-Type-Options, X-Frame-Options, Referrer-Policy.
  • Advanced (Professional) — HSTS, Permissions-Policy, a Content-Security-Policy (report-only by default, with a builder) and the cross-origin isolation trio (COOP / CORP / COEP).

The Server Setup tab can additionally export the configured headers as server-level nginx add_header / Apache Header directives.

Protection & Hardening Score

Two dashboard gauges (0–100 plus an A+–F grade, Mozilla-Observatory style) rate your detection coverage and your hardening posture, with per-item deep links to switch a sensor on. Locked (paid) features count toward the visible potential, not against your score — so the free tier can still reach a top grade.

Audit Event Trail (Business)

An append-only user-lifecycle trail — logins, failed logins, password resets, profile updates, role changes (including the acting user), registrations and new-IP detection — with filters, CSV / JSON export, WordPress GDPR export/erasure integration and retention cleanup (1 year on Business, configurable on Enterprise). Stored in the dedicated audit_log table (schema v9). The standard 30-day security logs stay available on every plan; the audit trail is the compliance-grade record on top.

MainWP Integration

Hive is remote-manageable from a MainWP dashboard with no extra child plugin. It hooks the MainWP Child mainwp_child_extra_execution filter (authenticated by the MainWP Child channel) and answers two jobs: a security-metrics sync (aggregate counts only — active blocks, whitelist size, failed logins, comment spam, reputation blocks, queue size, recent critical events, 2FA-enabled users) and API-key provisioning from the trusted dashboard. No IPs, usernames, secrets or the API key leave the site.

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

Eight tables, created on activation and prefixed wp_reportedip_hive_. Schema version 9, with idempotent step-by-step migration on every plugin update; opt-in delete on uninstall. On Multisite every table lives under $wpdb->base_prefix so threat decisions apply network-wide.

  • 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.
  • audit_log — append-only user-lifecycle audit trail (Business); added in schema v9.

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 10-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 sixteen sensors and can I disable individual ones?

See "The Sixteen 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 — fully, since 2.0.0. The Full Edition is network-only (Network: true): per-site activation is hidden by WordPress so the security configuration stays uniform. All tables live under $wpdb->base_prefix, so a single threat decision applies network-wide — cross-site brute-force attempts aggregate into one central counter and one block locks the IP out of every sub-site. Network Admins get the full settings and an all-sites Logs view; Site Admins on a sub-site get a read-only Status / Logs UI plus two writable per-site overrides (Frontend-2FA slug and additive 2FA-enforcement roles). Cron runs only on the main site.

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.1.x — The firewall release: a server-delivered, Ed25519-signed Rule Delivery Framework feeding a request-inspecting Web Application Firewall (free engine + Paranoia-Level-1 baseline, PRO Level 2/3 via Priority Sync), verified-bot detection, disposable-email blocking, a comment honeypot, security response headers (basic free, advanced PRO), a dashboard protection & hardening score, block-page reference codes (X-RIP-Ref), the Business audit event trail (schema v9), MainWP integration and a Firewall admin area.
  • 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+, coordinated-attack Hardening Mode, decoy-path detect-and-report.
  • 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