Vous cherchez une vue d'ensemble ? Rendez-vous sur la page d'accueil du plugin pour découvrir ses fonctionnalités, ses tarifs et la procédure d'installation. Cette page constitue la référence technique.
Plugin WordPress — ReportedIP Hive (Full Edition)
ReportedIP Hive est un plugin de sécurité WordPress développé par la communauté. Il transforme chaque site protégé en capteur : lorsqu’un site est attaqué, la « ruche » en tire des enseignements et tous les autres sites peuvent repousser l’attaquant avant même que la première requête n’aboutisse. Threat Intelligence en temps réel, seize Attack Sensors dont un Web Application Firewall, une authentification à deux facteurs (2FA) à quatre méthodes, Progressive Block Escalation et ensembles de règles de pare-feu signés et fournis par le serveur. Open source, publié sous licence GPLv2+ sur GitHub.
vX.Y.Z.
Installation
Télécharger le plugin
Téléchargez la dernière version reportedip-hive.zip sur la page GitHub Releases, ou téléchargez-le depuis votre Dashboard.
Installez et activez
Dans votre interface d'administration WordPress, rendez-vous dans Plugins → Ajouter → Télécharger un plugin, sélectionnez le fichier ZIP, cliquez sur « Installer maintenant », puis sur « Activer ».
Lancer le Setup Wizard
Après l’activation, le Setup Wizard en dix étapes se lance automatiquement. Il vous guide à travers le mode de fonctionnement, la API Key, les seuils de Brute Force, le pare-feu (WAF, action « verified-bot », mode « e-mail jetable », « Comment Honeypot »), la liste d’authentification à deux facteurs (2FA), les règles de conservation, le slug de connexion masqué et le pied de page automatique (en option).
Restez à jour
Le vérificateur de mises à jour intégré (Plugin Update Checker v5.6+) interroge GitHub Releases toutes les 12 heures. Les nouvelles versions apparaissent dans l'écran « Plugins » de WordPress comme n'importe quelle autre mise à jour de plugin — aucune réinstallation manuelle n'est nécessaire. Format des balises épinglées : vX.Y.Z. Après une mise à jour, les pages du plugin affichent un résumé « Nouveautés » (qui peut être masqué) présentant les points forts de la version.
Setup Wizard (10 étapes)
L'assistant s'exécute lors de la première activation et peut être relancé à tout moment depuis les paramètres du plugin. Chaque étape est immédiatement enregistrée côté serveur à chaque navigation (y compris en cliquant sur « Retour »), ce qui vous permet de vous arrêter et de reprendre sans perdre aucun paramètre.
| Étape | Ce qu’elle configure |
|---|---|
| 1. Bienvenue | Présentation, lien vers les Docs et importation facultative en un clic d'un fichier JSON d'exportation des paramètres existants. |
| 2. Connexion | Mode de fonctionnement (Local Shield / Community Network), API Key avec validation en temps réel sur reportedip.com. La procédure de création d'une API Key est décrite dans les Docs sur l'authentification. |
| 3. Protection | Login / comment-spam / XMLRPC / 404-scan / REST-burst thresholds and timeframes, report-only toggle, block-duration strategy (fixed length vs. progressive ladder). |
| 4. Pare-feu | Web Application Firewall (activation / Report-Only Mode), action sur les bots vérifiés (signaler ou bloquer les usurpateurs), mode e-mail jetable (désactivé / surveiller / bloquer) et le Comment Honeypot — le tout avec des paramètres par défaut sécurisés. |
| 5. Authentification à deux facteurs (2FA) | Activer / désactiver chacune des quatre méthodes (TOTP, e-mail, SMS, WebAuthn), appliquer des rôles, des jours de grâce, l’expiration des Trusted Devices. |
| 6. Confidentialité | Conservation des données, anonymisation automatique, niveau de journalisation, activation/désactivation de la journalisation détaillée. |
| 7. Notifications | Destinataires (séparés par des virgules, validés via is_email()), nom et adresse e-mail de l'expéditeur pour les e-mails transactionnels, synchronisation facultative de la liste de contacts vers le compte ReportedIP.com. |
| 8. Login | Hide Login URL slug (3 à 50 caractères, slugs figurant sur la Blacklist rejetés), mode de réponse pour l’ancienne /wp-login.php (page de blocage ou 404). |
| 9. Promotion | Bannière de pied de page automatique facultative, variante (badge / écusson / bannière / statistique) et alignement. |
| 10. Terminé | Résumé de l’opération, lien vers le Dashboard. |
Modes de fonctionnement
Deux modes — basculez entre eux à tout moment sans perdre vos données locales.
| Fonctionnalité | Local Shield | Community Network |
|---|---|---|
| Les seize Attack Sensors | Oui | Oui |
| Authentification à deux facteurs (2FA) à 4 méthodes + Trusted Devices + Recovery Codes | Oui | Oui |
| Progressive Block Escalation | Oui | Oui |
| Masquer l'URL de Login | Oui | Oui |
| Vérification de la réputation IP par rapport à la base de données Hive | Non | Oui (via l'API) |
| Reports d'attaques anonymisés renvoyés à la communauté | Non | Oui (automatique) |
| Clé API requise | Non | Oui (formule Free disponible) |
| Les données quittent votre serveur | Jamais | Uniquement l'adresse IP de l'attaquant + la Threat Category + l'horodatage |
Ce dont vous bénéficiez à chaque niveau
Le plugin Hive est entièrement fonctionnel sur la formule Free : protection locale, les seize capteurs, les quatre méthodes d’authentification à deux facteurs (2FA). Les niveaux payants incluent une infrastructure de diffusion gérée (e-mail et SMS) ainsi que des quotas plus élevés pour le Community Network. Consultez la page Tarifs pour une comparaison complète et pour passer à un niveau supérieur.
| Gratuit | Contributor | Professional | Business | Enterprise | |
|---|---|---|---|---|---|
| Prix / mois (TVA comprise) | 0 € | 0 € | 14,90 € | 39,00 € | À partir de 663 € |
| Prix / an (≈ 17 % de réduction) | 0 € | 0 € | 149 € | 389 € | Personnalisé |
| Durée minimale | — | — | Mensuel | Mensuel | 12 mois |
| Vérifications API / jour | 1 000 | 5 000 | 25 000 | 100 000 | Illimité |
| Détection et signalement des chemins leurres (fichier .htaccess géré automatiquement, depuis la version 2.0.11) | Oui | Oui | Oui | Oui | Oui |
| Hardening Mode contre les attaques coordonnées (depuis la version 2.0.8) | — | — | Oui | Oui | Oui |
| Web Application Firewall — moteur + ensemble de règles de base (depuis la version 2.1.2) | Oui | Oui | Oui | Oui | Oui |
| Priority Sync — ensembles de règles WAF avancés (Paranoia Level 2/3) + flux en temps réel d'adresses IP de bots / flux jetables | — | Hebdomadaire | Quotidien | Quotidien | Quotidien |
| Verified Bot Detection (plages d’adresses IP officielles + FCrDNS) | Oui | Oui | Oui | Oui | Oui |
| Disposable-Email Blocking et Comment Honeypot | Oui | Oui | Oui | Oui | Oui |
| Security Headers — le trio de base (X-Content-Type-Options, X-Frame-Options, Referrer-Policy) | Oui | Oui | Oui | Oui | Oui |
| Security Headers avancés (HSTS, Permissions-Policy, générateur CSP, isolation inter-origines) | — | — | Oui | Oui | Oui |
| Protection & Hardening Score (jauges du Dashboard, note de A+ à F) | Oui | Oui | Oui | Oui | Oui |
Codes de référence des pages de bloc (X-RIP-Ref) | Oui | Oui | Oui | Oui | Oui |
| MainWP Integration (gestion à distance) | Oui | Oui | Oui | Oui | Oui |
| Audit Event Trail (journal du cycle de vie des utilisateurs + exportation au format CSV/JSON, depuis la version 2.1.2) | — | — | — | Oui | Oui |
| Reports / jour | 50 | 200 | 1 000 | 5 000 | Illimité |
| Threat Feed de la communauté (Blacklist quotidienne) | — | Oui | Oui | Oui | Oui |
| Nombre de domaines par licence | 1 | 1 | 3 | 15 | Illimité |
| E-mails 2FA / mois (SMTP géré) | — | — | 500 | 2 500 | Illimité (utilisation raisonnable) |
| 2FA SMS / mois (relais géré dans le monde entier) | — | — | 25 | 75 | Sur mesure |
| SMS Bundles prépayés (50 / 200 / 500 SMS à 14,90 / 49,90 / 99,90 €, TTC) | — | — | Oui | Oui | Oui |
| Mail Bundles (1 000 / 5 000 / 25 000 e-mails à 4,90 / 14,90 / 49,90 €, TTC) | — | — | Oui | Oui | Oui |
| Modèles de courrier personnalisés à l'image de votre marque | — | — | — | Oui | Oui |
| Rapports et analyses sur l'utilisation de la 2FA | — | — | Oui | Oui | Oui |
| Politiques d'authentification à deux facteurs (2FA) configurables par rôle d'utilisateur | — | — | Oui | Oui | Oui |
| Restriction des horaires de Login des utilisateurs (par rôle / par utilisateur) | — | — | — | Oui | Oui |
| Opérations en masse et analyses | — | — | Oui | Oui | Oui |
| Multi-site Dashboard sur ReportedIP.com | — | — | Oui | Oui | Oui |
| Clés de sécurité avancées (clés WebAuthn multiples, détection de modèle, alertes relatives aux clés) | — | — | — | Oui | Oui |
| White-label (Setup Wizard, pages d'authentification 2FA, modèles d'e-mails) | — | — | — | Oui | Oui |
| WooCommerce Frontend 2FA (défi intégré à la vitrine en ligne avec thème personnalisé) | — | — | Oui | Oui | Oui |
| Intégration complète de WooCommerce (modèles White-label, audit des abonnements / adhésions) | — | — | — | Oui | Oui |
| Scripts WP-CLI complets | — | — | — | Oui | Oui |
| GDPR Export Tool conforme au RGPD | — | — | — | Oui | Oui |
| Weekly PDF Security Report (e-mail) | — | — | Oui (hebdomadaire) | Oui (quotidien en option) | Oui |
| Cloud Backup des paramètres Hive | — | — | 30 j | 90 jours | 1 an |
| Conservation des journaux | 30 jours | 30 jours | 90 jours | 1 an | Configurable |
| Support SLA | Communauté | Communauté | E-mail : 48 h | Priorité : 12 h | Téléphone : 4 h |
| AVV / DPA personnalisés | — | — | — | — | Oui |
La formule Business peut faire l'objet de plusieurs réservations. Tous les chiffres indiqués ci-dessus pour la formule Business s'entendent par licence. Réservez la formule Business x2, x5, x10 ou x20 lors du paiement (ou modifiez ce choix ultérieurement dans le portail client Stripe) : le nombre de vérifications/Reports quotidiens, le quota mensuel d’e-mails/SMS pour l’authentification à deux facteurs (2FA) et le nombre de domaines s’adaptent tous en fonction du nombre de licences que vous possédez — par exemple, x5 = 75 domaines et 500 000 vérifications/jour. Une remise sur volume s’applique automatiquement à partir de x2. La formule PRO reste à licence unique ; les chiffres de la formule Enterprise sont illimités (dans le cadre d’une utilisation raisonnable) et ne sont jamais multipliés.
Ordre de consommation des forfaits
(PRO et Business) : d’abord le quota mensuel inclus (25 SMS / 500 e-mails pour la version PRO, 75 / 2 500 pour la version Business), puis le solde prépayé du forfait. Une fois ces deux quotas épuisés, l’API renvoie un code HTTP 429 et Hive bascule vers l’authentification locale wp_mail() pour les e-mails (ou les limites strictes pour les SMS) — les autres méthodes de 2FA restent opérationnelles. Les crédits des forfaits n’expirent jamais. Stripe utilise tax_behavior = inclusive pour les forfaits au prix brut (conformes à la PAngV) ; la facturation inversée / OSS est gérée automatiquement par Stripe Tax.
- 2.1.0 — MainWP Integration et codes de référence pour les pages de blocage. Hive est désormais gérable à distance depuis un Dashboard MainWP (synchronisation agrégée des métriques de sécurité et provisionnement des clés API) sans plugin enfant supplémentaire, avec authentification via le canal MainWP Child — aucune adresse IP, aucun nom d’utilisateur, aucun secret ni aucune API Key ne quitte le site. Chaque réponse bloquée comporte désormais un code de référence corrélable (par exemple
WAF_SQLI-3F9A2B71), affiché sur la page et émis en tant qu’en-têteX-RIP-Refen-tête ; le jeton d’incident est un hachage à sens unique de l’adresse IP, du motif et de l’heure, de sorte qu’aucune donnée personnelle n’est exposée. La page bloquée a été reconstruite sur le système de conception et entièrement traduite. - 2.1.2 — Cadre de diffusion des règles + Web Application Firewall (moteur gratuit, fonctionnalités PRO). Ensembles de règles diffusés par le serveur, versionnés, signés avec Ed25519 et échelonnés par niveaux (
waf,bot_signatures,disposable_domains,scan_paths) vérifiés par rapport à une clé publique intégrée avant leur application — un flux altéré ou inaccessible ne peut en aucun cas corrompre les règles, et une base de référence intégrée fonctionne entièrement hors ligne. Le WAF inspectant les requêtes et sa base de référence OWASP Top 10 de Paranoia Level 1 sont gratuits sur toutes les formules ; la formule « Professional » débloque le jeu de règles plus approfondi et fréquemment mis à jour de niveau 2/3 via Priority Sync. Renforcé contre les attaques ReDoS et en mode « fail-open », avec un module prêt à l’emploi pré-WordPress en option (configuration automatique Apache / PHP-FPM, snippet nginx) qui bloque les menaces avant même le chargement de WordPress. - 2.1.2 — Davantage de capteurs gratuits. Verified Bot Detection (plages d’adresses IP officielles + Reverse DNS confirmé en amont — les robots d’indexation légitimes ne sont jamais bloqués), Disposable-Email Blocking lors de l’inscription (les relais de confidentialité sont autorisés), un « Comment Honeypot » invisible, des Security Headers de base, un Protection & Hardening Score pour le Dashboard (notes de A+ à F) — le tout gratuitement. La version « Professional » ajoute des Security Headers avancés (HSTS, Permissions-Policy, CSP, isolation inter-origines) ; la version « Business » ajoute l’Audit Event Trail (le schéma v9 ajoute le
audit_logtableau). - 2.1.3 — Correction IPv6 pour les bots vérifiés. La confirmation directe résout désormais également les enregistrements AAAA ; ainsi, les robots d’indexation légitimes se connectant via IPv6 ne sont plus signalés comme faux ;
facebookexternalhitla vérification s’effectue par rapport aux plages d’adresses IP publiées par Meta plutôt que par Reverse DNS. - 2.1.4 — Refonte de l’expérience utilisateur de l’administration du pare-feu. L’onglet « Aperçu » est désormais un mini-Dashboard (état par module, compteurs d’activité sur 7 jours, flux des événements récents du pare-feu) ; chaque onglet s’ouvre avec une introduction en langage clair, et un nouvel onglet « Configuration du serveur » regroupe tous les extraits de code relatifs au serveur web en un seul endroit. La configuration de l’Extended Protection est désormais vérifiable : le statut indique si la protection s’est effectivement déclenchée pour la requête en cours. Nouveaux codes de motif WAF spécifiques pour SSRF, Log4Shell, injection d’objets PHP, NoSQL, XXE, web-shell, CRLF et injection de modèles.
- 2.1.5 – 2.1.8 — Renforcement de la gestion des False Positives et des mécanismes de sécurité intégrés. Les robots d’indexation vérifiés sont exemptés de la chaîne de sondes d’User Enumeration (correction d’une régression SEO), la classification des bots s’effectue désormais selon trois états (« inconnu » n’est jamais signalé), le comparateur CIDR rejette proprement les familles d’adresses non correspondantes, les adresses de bouclage et privées ne sont jamais signalées comme provenant d’attaquants, et la suppression du module « Extended Protection » neutralise la protection en la transformant en un espace réservé inerte au lieu de la supprimer — une directive résiduelle
auto_prepend_filene peut plus provoquer d’erreur 500 sur le site. - 2.1.9 – 2.1.11 — WAF Exceptions gérées en arrière-plan. Les False Positives peuvent être corrigés depuis l’interface d’administration sans modifier le code : une Allowlist « WAF Exceptions » (limitée à une règle, un groupe de règles ou le moteur sur un chemin, éventuellement restreinte à une adresse IP/CIDR) ainsi qu’une action « Autoriser » en un clic sur chaque ligne du journal WAF. Les exceptions sont également intégrées dans le module prêt à l’emploi pré-WordPress, et chaque décision de blocage enregistre désormais la valeur correspondante, la cible, la méthode, l’URI et l’agent utilisateur — ce qui permet un diagnostic sans avoir à reproduire la requête. Voir « WAF Exceptions » ci-dessous.
- 2.1.12 – 2.1.13 — Dashboard de provisionnement et d’analyse MainWP. MainWP peut basculer un site géré en mode « Community Network » parallèlement à l’approvisionnement des éléments clés, et le Dashboard de sécurité a été repensé pour offrir une vue analytique complète (bandeau d’en-tête, sept familles de menaces, graphique des groupes de règles WAF, répartition par niveau de gravité, principaux attaquants).
- 2.1.14 – 2.1.18 — Exactitude en conditions réelles d’hébergement. Toutes les dates et heures stockées sont conformes à l’UTC (le blocage automatique échouait silencieusement sur les serveurs dont le fuseau horaire de la base de données n’était pas l’UTC), les horodatages administratifs s’affichent dans le fuseau horaire du site, les requêtes de niveau sont traitées exclusivement à partir du cache (plus de sondage de quota des chemins fréquents), et la santé de l’API est mesurée sur une fenêtre glissante, de sorte qu’une interruption ponctuelle n’entraîne plus un état « dégradé » permanent.
- 2.1.17 – 2.1.20 — Extended Protection sur nginx. Les piles PHP-FPM sont configurées automatiquement via un répertoire racine
.user.ini, quel que soit lelocation, le garde ignore l’inspection du corps des requêtes authentifiées (les éditeurs enregistrant des articles ne peuvent plus le déclencher), la désactivation du WAF neutralise également le garde, et l’onglet « Configuration du serveur » affiche les extraits manuels de php.ini /fastcgi_paramextraits de php.ini manuels dès que la directive de génération automatique n’est pas encore active. - 2.1.22 – 2.1.24 — Application de l’authentification à deux facteurs (2FA) sans verrouillage de compte. Un utilisateur qui a épuisé le délai de grâce et son quota de tentatives est désormais connecté et redirigé directement vers l’inscription obligatoire à la 2FA au lieu d’être bloqué (l’ancien comportement de blocage définitif reste disponible en tant qu’option de politique) ; les administrateurs et les super-administrateurs ne peuvent jamais être bloqués définitivement. Une soumission en double du défi d’authentification à deux facteurs (2FA) ne bloque plus les utilisateurs sur une page « session expirée ». De plus, de nouvelles signatures WAF : la
eval-stdin.php(CVE-2017-9841) est bloquée sur toutes les formules. - 2.1.25 — Classe d’attaques REST par lots bloquée, contournement par Payload encodée corrigé. Deux nouvelles règles de base gratuites bloquent structurellement la primitive de confusion de routes REST du cœur de WordPress (et non par jeton, de sorte que les variantes ne peuvent pas les contourner) ; le pare-feu inspecte désormais une copie décodée du corps de la requête (les Payloads encodés en pourcentage dissimulés dans du JSON sont détectés), et les blocages de Paranoia-Level 2/3 affichent leur catégorie de référence spécifique au lieu d’un
BLOCKED. - 2.1.26 – 2.1.28 — Vérification des déclarations des robots d’indexation, blocages basés sur la réputation partout. Un agent utilisateur se présentant comme un robot d’indexation est soumis à une vérification croisée par rapport à un Reverse DNS confirmé en amont et aux plages d’adresses IP officielles avant qu’un capteur ne l’épargne ; un garde central empêche tout chemin de blocage automatique d’exclure un Googlebot vérifié, tandis que les événements impliquant des identifiants (échecs de Login, attaques par force brute sur les mots de passe) contournent entièrement l’Allowlist des bots — les véritables robots d’indexation ne soumettent jamais d’identifiants. Une baisse de réputation au sein de la communauté entraîne désormais un blocage temporaire couvrant toutes les surfaces, et pas seulement le formulaire de Login. Version minimale de WordPress portée à 5.9.
- 2.1.29 – 2.1.31 — Autoprotection et escalade plus intelligente. Le serveur ne peut plus bloquer automatiquement sa propre adresse IP en cas de robots d’indexation préchargeant le cache, de boucles WP-Cron ou d’auto-requêtes REST (une migration par mise à jour supprime les auto-blocages existants), l’échelle d’escalade pondère le volume d’attaques (une rafale de 60 violations saute des échelons au lieu de repartir du minimum), les infractions répétées à une même règle sont regroupées en une seule ligne de journal sans perte de crédit sur l’échelle, et les pages d’archives d’auteur peuvent rester publiques indépendamment du
?author=Nblocage par énumération. - 2.1.32 — La version axée sur les performances. 36 → 11 requêtes de plugin par requête front-end anonyme, la Blocklist pré-WordPress répond à partir d’un en-tête de 8 Ko au lieu de lire jusqu’à 1 Mo par requête, les corps de requête ne sont lus que lorsqu’une règle les inspecte réellement, le TTFB du Dashboard est passé de 920 ms à 278 ms sur une table de journaux de 500 000 lignes, et le nettoyage de la rétention s’effectue par blocs délimités (le schéma v13 rééquilibre l’ensemble d’index). Les blocages par plage CIDR sont à nouveau appliqués par la couche WordPress.
- 2.1.33 – 2.1.36 — Prise en charge officielle de YubiKey et des clés de sécurité matérielles. Les trois surfaces de vérification effectuent une procédure WebAuthn complète ; un gestionnaire de clés de sécurité dans le profil gère plusieurs clés nommées ; l’enregistrement détecte le modèle de clé via l’attestation (AAGUID) ; un compteur de signatures non incrémental (clé clonée) est rejeté et signalé par e-mail, et la section 2FA du profil a été repensée autour de fiches de méthode en langage clair avec une méthode par défaut sélectionnable par l’utilisateur. Une clé par compte est gratuite sur tous les forfaits ; les clés de sécurité avancées (clés multiples, détection du modèle, alertes de cycle de vie) sont réservées à la version Business. Voir Hardware Security Keys.
- 2.1.37 – 2.1.41 — Blocage de Tor, proxys de confiance et visibilité de l’administrateur. Blocage optionnel des nœuds de sortie Tor (formule « Professional ») via un
tor_exitsensemble de règles signé et actualisé deux fois par jour, des plages de sources de proxys de confiance afin qu’un en-tête IP transféré ne puisse plus être usurpé par des requêtes directes vers l’origine, un widget de sécurité sur le Dashboard wp-admin (compatible Multisite), un droit de veto « ne jamais bloquer » pour les infrastructures vérifiées par la communauté, une recherche d’IP plus complète ainsi quewp reportedip lookup, et des compteurs de tentatives à sécurité anti-concurrence (schéma v15). Le pare-feu s’est durci en cours de route : une exemption pour les robots d’indexation nécessite désormais un signal vérifiable (Reverse DNS ou plages d’adresses IP officielles), les requêtes manifestement malveillantes la révoquent purement et simplement, les groupes de règles de Payload bloquent dès la première occurrence, les versions de publication intègrent à nouveau les ensembles de règles fournis, et quatre règles comblent la faille CVE-2026-64638 (XSS2Shell) dans la chaîne de l'écran de Login. Tous les liens et Endpoints ont été transférés vers ReportedIP.com.
Défense en 6 couches
Hive applique ses vérifications dans l’ordre — chaque couche peut interrompre la requête avant qu’elle n’atteigne la suivante. Les plugins sont init priorité 1 afin que les autres plugins ne s’exécutent pas pour une adresse IP bloquée.
- Whitelist — les adresses IP et plages CIDR de confiance sont toujours autorisées (votre bureau, les services de surveillance, etc.).
- Liste de blocage locale — adresses IP que vous avez bloquées manuellement ou qui ont dépassé les seuils locaux. Stockées dans
wp_reportedip_hive_blocked. - Web Application Firewall — l’ensemble de règles WAF actif est comparé à l’URI, à la requête, au corps du message et à l’agent utilisateur ; toute correspondance est bloquée via le chemin 403 partagé et codé par référence. Prise en compte de la Whitelist et de l’auteur du contenu pour éviter les False Positives. Un module optionnel à intégrer avant WordPress peut exécuter cette couche avant même le chargement de WordPress.
- Compteurs de tentatives — les compteurs de Login, de commentaires, d’XMLRPC, de rafales REST et de scans 404 déclenchent un blocage automatique dès que le seuil est atteint.
- Réputation de la communauté — en mode « Community Network », les adresses IP dont le niveau de confiance est ≥ au seuil sont bloquées en périphérie.
- Vérification 2FA — les comptes protégés doivent fournir un deuxième facteur d’authentification pour se connecter.
The sixteen Attack Sensors
Chaque capteur peut être activé ou désactivé et réglé indépendamment dans Paramètres → Protection. Les deux dernières lignes — la Block Escalation et le pont de connexion WooCommerce — sont des mécanismes complémentaires s’inscrivant dans le même pipeline plutôt que des capteurs distincts : l’escalade correspond à l’échelle de réponse alimentée par chaque capteur, tandis que le pont WooCommerce comptabilise les échecs de Login à la vitrine en ligne au profit du capteur de Brute Force existant.
| Capteur | Ce qu’il surveille | Seuil par défaut |
|---|---|---|
| Login par force brute | Échecs de Login par adresse IP via wp_login_failed. | 5 en 15 minutes |
| Attaque par « password spray » | Nombre de noms d'utilisateur distincts testés depuis la même adresse IP (attaques par essais de mots de passe « low-and-slow »). | 5 en 10 min |
| Spam de commentaires | Nombre de commentaires publiés par adresse IP via comment_post. | 5 en 60 min |
| Abus XMLRPC | Appels XMLRPC par adresse IP via xmlrpc_call. | 10 en 60 min |
| Pics d'API REST API | Requêtes REST anonymes par adresse IP. Les Endpoints de la bannière de cookies sont contournés par défaut (real-cookie-banner, complianz, borlabs-cookie, cookie-law-info). | 240 en 5 minutes |
| Détecteur de 404 / scan | Taux élevé de 404 et déclenchement instantané sur les chemins des Honeypots (.env, .git/config, wp-config.php.bak, …). | 12 en 2 min |
| Détection et signalement des chemins leurres | Pistes leurres (.env.backup, wp-config.old.php, db-dump-master.sql.php, admin-shell-console.php, …). Un seul accès renvoie un code 403 et met en file d’attente un rapport communautaire de gravité élevée — mais ne déclenche pas de blocage local de l’adresse IP pendant 24 h ; ainsi, un plugin de sauvegarde en train d’écrire wp-config.old.php ou un administrateur testant l’URL-appât ne risque pas de bloquer l’accès au site à son propre trafic. Apache .htaccess est géré automatiquement (bloc de marqueurs # BEGIN ReportedIP Hive Decoy placé au-dessus # BEGIN WordPress via insert_with_markers()) ; ainsi, les véritables fichiers-appâts présents sur le disque sont acheminés via WordPress au lieu d’être servis directement par Apache. Les administrateurs Nginx disposent d’un extrait de code à copier-coller rewrite ^ /index.php last; extrait de code à copier-coller dans les Paramètres. Le filtre reportedip_hive_decoy_paths permet d’étendre la liste des leurres. | 1 détection = 403 + signalement par la communauté |
| Web Application Firewall | Inspecte l’URI, la chaîne de requête, le corps de la requête et l’agent utilisateur par rapport au waf (SQLi, XSS, traversée de chemin, injection de commande, wrappers LFI, SSRF, Log4Shell/JNDI, injection d’objet PHP, NoSQL, XXE, téléchargements de shells web, CRLF, injection de modèle). Moteur + base de référence OWASP Top 10 « Paranoia-Level 1 » gratuite sur tous les forfaits ; la version Professional débloque les ensembles de règles signés de niveaux 2 et 3 via Priority Sync. Renforcé contre les attaques ReDoS, mode « fail-open », prise en compte des Whitelists et des auteurs de contenu. Blocages optionnels à intégrer avant le chargement de WordPress. | Paranoia-Level sélectionnable |
| Verified Bot Detection | Vérifie qu’une requête se présentant comme provenant de Googlebot, Bingbot ou d’un autre robot d’indexation provient bien de ces sources — d’abord par une correspondance sans DNS avec les plages d’adresses IP officielles du robot, puis par un recours à la Reverse DNS confirmée en amont. Les usurpateurs sont signalés (par défaut) ou bloqués ; les robots d’indexation légitimes ne sont jamais bloqués. | Signaler ou bloquer les usurpateurs |
| Disposable-Email Blocking | Vérifie l’adresse lors de l’inscription (WordPress + WooCommerce) par rapport à la disposable_domains liste. Les relais de confidentialité (Apple « Masquer mon e-mail », Firefox Relay, etc.) constituent une catégorie distincte qui est autorisée par défaut. | Désactiver / surveiller / bloquer |
| Comment Honeypot | Un champ leurre invisible et ignoré par les lecteurs d’écran dans le formulaire de commentaire ; les robots spammeurs qui remplissent tous les champs sont rejetés sans que les visiteurs réels ne subissent les inconvénients d’un CAPTCHA. | Toujours activé (lorsqu’il est activé) |
| User Enumeration | Bloque ?author=N, /wp-json/wp/v2/users, les recherches d’utilisateurs via oEmbed ; uniformise les réponses d’erreur pour les utilisateurs invalides et les mots de passe incorrects. Les pages d’archives d’auteur (/author/<slug>/) partagent ce bloc par défaut et peuvent rester publiques grâce à un commutateur distinct. | 5 en 5 min |
| Surveillance des mots de passe d'application | Limite application_password_failed_authentication; empêche le contournement de l’authentification à deux facteurs (2FA) via l’authentification Basic. | 5 en 15 min |
| Geo / ASN Anomaly | Compare le pays et l’ASN lors d’un Login réussi à un historique glissant de 90 jours ; révoque éventuellement les jetons des Trusted Devices en cas d’anomalie. | Au moins un Login préalable requis |
| Force du mot de passe | Impose une longueur minimale et une combinaison de classes de caractères pour les rôles concernés ; vérification optionnelle « Have-I-Been-Pwned » k-anon (préfixe SHA-1 uniquement). | 8 caractères + classes |
| Masquer l’URL de Login | Slug personnalisé (par défaut wp-login.php) ; l’URL d’origine renvoie une page de blocage ou une erreur 404. | Slug de 3 à 50 caractères |
| Block Escalation | Échelle progressive — les récidivistes paient davantage à chaque cycle. | 5 min → 15 min → 30 min → 24 h → 48 h → 7 j |
| Login à WooCommerce | Les échecs de connexion au formulaire de compte WooCommerce sont pris en compte dans le compteur de tentatives de Brute Force. | Hérite de la limite de tentatives par Brute-Force |
Progressive Block Escalation
Les récidivistes paient plus cher. L'échelle par défaut est la suivante : 5 min → 15 min → 30 min → 24 h → 48 h → 7 j. Après 30 jours sans incident, le compteur revient à l'étape 1. Les visiteurs légitimes bloqués pour la première fois (CGNAT, administrateurs ayant fait une erreur de saisie, sortie du réseau mobile) sont débloqués en quelques minutes ; les attaquants persistants atteignent l’étape des 7 jours.
L'échelle, la fenêtre de réinitialisation et le commutateur principal se trouvent sous Paramètres → Blocage → Blocage progressif. L'étape « Protection » de l'assistant affiche le commutateur principal afin que les nouvelles installations prennent en compte l'escalade dès la première sauvegarde. Le paramètre fixe block_duration s'applique toujours lorsque l'échelle est désactivée. Une granularité inférieure à l'heure est fournie par le ReportedIP_Hive_Database::block_ip_for_minutes().
Web Application Firewall et distribution des règles
Depuis la version 2.1.2, Hive intègre un Web Application Firewall inspectant les requêtes. Lorsqu’ init il compare l’ waf ensemble de règles actives à l’URI, à la chaîne de requête, au corps de la requête et à l’agent utilisateur, et bloque toute correspondance via le chemin 403 partagé, compatible avec la mise en cache et codé par référence. Il est renforcé contre les attaques ReDoS (retour en arrière PCRE limité, mode « fail-open » en cas de règle mal formée), prend en compte les Whitelists et l’auteur du contenu pour éviter les False Positives, et ajoute environ 4 µs d’utilisation du processeur par requête sans aucune requête de base de données supplémentaire lorsqu’un cache d’objets persistant est présent.
Les règles ne sont pas codées en dur dans le plugin.
Elles sont fournies par la Rule API
de ReportedIP — diffusées par le serveur, versionnées, signées avec Ed25519 et réparties par niveaux sur cinq ensembles de règles (waf, bot_signatures, disposable_domains, scan_paths, tor_exits). Le plugin vérifie chaque ensemble de règles par rapport à une clé publique intégrée avant de l’appliquer et se rabat toujours sur un ensemble de règles de base intégré ; ainsi, un flux altéré, surdimensionné ou inaccessible ne peut jamais corrompre vos règles. Les nouvelles signatures d’attaques sont diffusées à toutes les installations en quelques heures, sans qu’aucune mise à jour du plugin ne soit nécessaire.
- Gratuit sur toutes les formules — le moteur WAF et l’ensemble de règles de base « Paranoia-Level-1 » couvrant l’OWASP Top 10, entièrement utilisables hors ligne en mode « Local Shield » à partir de la base intégrée.
- Priority Sync (formules Professional et supérieures) — les ensembles de règles Paranoia-Level-2/3 plus approfondis, fréquemment mis à jour et signés (couverture de l’obfuscation et du contournement), ainsi que les flux en temps réel des plages d’adresses IP de bots et des domaines jetables. La formule Free synchronise la base de référence intégrée ; la formule Contributor, une fois par semaine ; les formules Professional et supérieures, quotidiennement.
- Module « Extended Protection » (en option) — un module pré-WordPress
auto_prepend_filequi exécute le WAF avant le chargement de WordPress. Les piles Apache (.htaccess) et PHP-FPM — y compris nginx + PHP-FPM — sont automatiquement configurées via un répertoire racine.user.ini, qui couvre tous les Endpoints PHP indépendamment deslocation(depuis la version 2.1.17) ; les piles ne disposant pas d’une SAPI PHP FastCGI bénéficient d’une ligne dans le fichier php.ini ou dans le panneau d’hébergementauto_prepend_fileou un extrait de code nginxfastcgi_paramextrait de l’onglet « Configuration du serveur ». Par défaut, le garde ignore l’inspection du corps de la requête pour les requêtes authentifiées ; ainsi, les éditeurs connectés qui enregistrent du contenu ne le déclenchent jamais. Les règles relatives aux URL et aux user-agents s’appliquent toujours, et le moteur intégré à WordPress reste le dispositif de sécurité tenant compte des capacités. Désactivé par défaut ; sa suppression supprime les directives contrôlées par Hive et neutralise le garde en le transformant en un espace réservé inerte au lieu de le supprimer (depuis la version 2.1.8), de sorte qu’une directive résiduelle dans un fichier php.ini ou une configuration nginx modifiée manuellement ne peut jamais pointer vers un fichier manquant et provoquer une erreur 500 sur le site. La désactivation du moteur WAF ou le passage en mode « rapport uniquement » neutralise également automatiquement le garde. - Codes de référence — chaque bloc (WAF ou capteur) porte un code corrélable tel que
WAF_SQLI-3F9A2B71, affiché sur la page de blocage et émis dans l’en-têteX-RIP-Refen-tête. Un visiteur bloqué par erreur fournit une courte chaîne de caractères que l’administrateur peut retrouver dans les journaux ; ce jeton est un hachage à sens unique de l’adresse IP, du motif et de l’heure, de sorte qu’aucune donnée personnelle n’est exposée.
La configuration et l’état en temps réel se trouvent dans le menu dédié au pare-feu : un mini-Dashboard « Aperçu » (état par module, compteurs sur 7 jours, événements récents du pare-feu), un onglet WAF (moteur / mode / sélecteur de niveau de paranoïa), un onglet « Vérification des bots », un onglet « Défense anti-spam » (adresses e-mail jetables + honeypot), une vue d’état de Rule Sync et un onglet « Configuration du serveur » qui regroupe tous les extraits de code du serveur web en un seul endroit.
WAF Exceptions — Gestion des False Positives
Depuis la version 2.1.9, un False Positive peut être résolu depuis l’interface d’administration sans modifier le code — à l’instar du fonctionnement des exclusions ModSecurity et de l’Allowlist de Wordfence. Un endpoint propriétaire qui reçoit légitimement des Payloads ressemblant à des attaques (un formulaire acceptant du code HTML, une API de sécurité ingérant des données d’attaques signalées, un constructeur de pages publiant du balisage brut) déclenche parfois une signature d’injection ; une exception permet à ce cas particulier de passer tandis que le moteur continue de protéger tout le reste.
- Où ? Pare-feu → WAF → WAF Exceptions, plus une action « Autoriser » en un clic sur chaque ligne du journal WAF qui préremplit une exception ciblée pour exactement cette règle sur ce chemin — pas besoin de connaître l’ID de la règle par cœur.
- Portées. Une exception cible une règle unique (par ID de règle, extrait du journal des blocages du WAF), un groupe de règles (sélectionné parmi les catégories connues du moteur) ou — pour un Endpoint propriétaire — l’ensemble du moteur sur un chemin, éventuellement restreint à une plage d’adresses IP ou CIDR. Une exception portant sur l’ensemble du moteur doit toujours comporter une restriction de chemin d’accès ou d’adresse IP, afin que le pare-feu ne puisse jamais être désactivé globalement par accident.
- Définissez son champ d’application de manière aussi restrictive que possible. Préférez une règle unique sur un chemin à un groupe de règles, et un groupe de règles à une exception portant sur l’ensemble du moteur. Le journal des blocages enregistre la valeur correspondante, la cible inspectée, la méthode de requête, l’URI et l’agent utilisateur (depuis la version 2.1.11), ce qui vous permet de voir exactement quelle règle s’est déclenchée et pourquoi avant de l’autoriser.
- La Extended Protection respecte cette même liste. Les exceptions actives sont intégrées au filtre de sécurité pré-WordPress et réactualisées à chaque modification de l’Allowlist — la couche pré-WordPress et le moteur intégré à WordPress sont toujours en accord.
- Multisite et formules d’abonnement. Les exceptions constituent des données à l’échelle du réseau, disponibles sur toutes les formules d’abonnement — le moteur de protection lui-même reste gratuit.
- Porte de secours pour les développeurs.
apply_filters('reportedip_hive_waf_bypass_routes', [])Exclut les routes REST au niveau du code. La correspondance s’effectue via un test de préfixe ancré par rapport à la route REST WP résolue — jamais via une sous-chaîne non ancrée de l’URI brute — ; ainsi, un jeton de contournement introduit clandestinement dans un paramètre de requête sans rapport ne peut pas désactiver le WAF.
Verified Bot Detection, Disposable-Email Blocking et Comment Honeypot
- Verified Bot Detection (gratuite). Permet de confirmer qu’une requête se présentant comme provenant de Googlebot, Bingbot ou d’un autre robot d’indexation provient bien de celui-ci — d’abord par une correspondance sans DNS avec les plages d’adresses IP officielles du robot (Priority Sync), puis par un recours au Reverse DNS confirmé en amont qui résout à la fois les enregistrements A et AAAA. Les usurpateurs sont signalés (par défaut) ou bloqués ; un robot d’indexation authentique n’est jamais bloqué.
facebookexternalhitVérification par rapport aux plages d’adresses IP publiées par Meta. - Disposable-Email Blocking (gratuit). Vérifie l’adresse fournie lors de l’inscription (WordPress et WooCommerce) par rapport à la liste des adresses e-mails jetables. Trois modes : désactivé / surveillance / blocage. Les relais de confidentialité (Apple « Hide My Email », Firefox Relay, etc.) constituent une catégorie distincte qui est autorisée par défaut. La liste en temps réel s’appuie sur Priority Sync.
- Comment Honeypot (gratuit). Un champ leurre invisible, exclu des lecteurs d’écran, sur le formulaire de commentaires ; les robots spammeurs qui remplissent tous les champs sont rejetés sans que les visiteurs réels ne subissent les inconvénients du CAPTCHA.
Blocage des nœuds de sortie Tor (Professional)
Depuis la version 2.1.41, Hive peut rejeter les connexions provenant de nœuds de sortie Tor connus. Cette fonctionnalité est strictement optionnelle — le bouton se trouve sous Paramètres → Blocage et est désactivé par défaut — et nécessite la formule Professional : la liste des nœuds de sortie est fournie sous forme de tor_exits via la Rule Sync régulière et est actualisée deux fois par jour côté serveur, ce qui lui permet de rester à jour malgré la rotation des nœuds de sortie. Le drapeau de isTor indicateur de réputation de la communauté couvre les adresses que la liste n’a pas encore répertoriées.
Les blocages Tor sont délibérément modérés. Ils sont temporaires — 24 heures par défaut, réglables via le reportedip_hive_tor_block_hours filtre — et ne sont jamais signalés à la communauté, car l’exploitation d’un nœud de sortie Tor ne constitue pas une preuve d’abus. Les adresses IP figurant sur la liste Whitelist ne sont jamais bloquées par Tor. Une fois le blocage expiré, la requête suivante réévalue la liste actuelle des nœuds de sortie.
Sources de proxy de confiance (Cloudflare, proxys inversés, équilibreurs de charge)
Lorsque votre site fonctionne derrière Cloudflare, un proxy inverse ou un équilibreur de charge, le pair qui se connecte est le proxy — l’adresse réelle du visiteur est transmise dans un en-tête HTTP tel que CF-Connecting-IP ou X-Forwarded-For. Sélectionnez cet en-tête sous Paramètres → Général → En-tête IP de confiance, et depuis la version 2.1.41, déclarez les adresses du proxy dans la liste Sources de proxy de confiance située juste en dessous — une adresse IP ou une plage CIDR par ligne, par exemple les plages Cloudflare publiées.
Une fois cette liste mise en place, l’en-tête n’est pris en compte que pour les requêtes provenant effectivement d’une adresse de proxy déclarée. Quiconque accède directement à l’origine ne peut pas usurper l’en-tête pour se faire passer pour une adresse figurant sur la Whitelist ou contourner un blocage actif. Une liste vide conserve le comportement précédent (en-tête accepté depuis n’importe quel pair), de sorte que les configurations existantes continuent de fonctionner — mais si vous faites confiance à un en-tête, déclarez vos proxys. La même vérification est appliquée dans le filtre « Extended Protection » pré-WordPress.
Security Headers
Renforcement des en-têtes de réponse sur chaque requête front-end. Les en-têtes déjà envoyés par votre serveur ou par un autre plugin sont détectés et laissés intacts.
- Trio de base (gratuit) —
X-Content-Type-Options,X-Frame-Options,Referrer-Policy. - Avancé (Professional) — HSTS,
Permissions-Policy, une politique de sécurité du contenu (Content-Security-Policy, en mode « rapport uniquement » par défaut, avec un générateur) et le trio d’isolation inter-origines (COOP / CORP / COEP).
L'onglet « Configuration du serveur » permet en outre d'exporter les en-têtes configurés au format nginx add_header / Apache Header au niveau du serveur.
Protection & Hardening Score
Deux jauges du Dashboard (de 0 à 100, plus une note de A+ à F, à la manière de Mozilla Observatory) évaluent votre couverture de détection et votre niveau de renforcement de la sécurité, avec des liens directs vers chaque élément pour activer un capteur. Les fonctionnalités verrouillées (payantes) sont prises en compte dans le potentiel visible, mais n’affectent pas votre score — la formule Free peut donc tout de même atteindre la meilleure note.
Dashboard de sécurité et analyses
Le Dashboard principal s’ouvre sur une bande d’en-tête — attaques bloquées au cours des 30 derniers jours, attaques bloquées aujourd’hui, adresses IP actuellement bloquées et nombre de vos couches de protection activées (par exemple 17 / 20). En dessous, les analyses s’appuient sur toutes les données des capteurs, et ne se limitent pas aux compteurs classiques de Login ou de spam.
- Chronologie des événements de sécurité. Un diagramme à aires empilées regroupant toutes les activités en sept catégories — Login et identifiants, Pare-feu (WAF), Scanners et sondes, Faux bots, Reconnaissance et énumération, Spam et inondations, et Anomalies — sur une période sélectionnable de 7, 30 ou 90 jours.
- Répartition des menaces. Une ventilation indiquant quelle famille d’attaques a dominé la période, afin que vous puissiez voir d’un seul coup d’œil si vous êtes confronté à des attaques par Brute Force, à des tentatives d’exploitation au niveau du pare-feu, à des scanners ou à du spam.
- Pare-feu — Principaux types d’attaques. Classement des blocages du WAF par groupe de règles (SQL Injection, cross-site scripting, traversée de chemin, Log4Shell, agents utilisateurs de scanners, etc.).
- Répartition par niveau de gravité. Nombre d’événements critiques / élevés / moyens / faibles, afin que le volume des événements graves ne soit jamais masqué dans un total unique.
- Principaux attaquants (30 jours). Les adresses IP sources les plus actives avec leur nombre d’accès, la date de leur dernière détection et s’elles sont actuellement bloquées ou simplement surveillées.
- Activité récente. Le flux d’événements en temps réel, chaque entrée étant associée à sa gravité et à sa famille de menaces, ainsi qu’aux détails pertinents (règle WAF correspondante, chemin exploré, nom de bot usurpé par le Spoofing).
Tous les chiffres sont réels, quel que soit le forfait — le Dashboard reflète ce que votre site a réellement bloqué. Les formules « Professional » et « Business » ajoutent des analyses plus approfondies (historique et conservation des journaux plus longs, géolocalisation des attaquants et piste d’audit conforme aux normes de conformité décrite ci-dessous).
Depuis la version 2.1.41, les chiffres clés s’affichent également sous forme de widget de sécurité directement sur le Dashboard WordPress lui-même : les attaques bloquées au cours des 30 derniers jours, les blocages du jour, les adresses IP activement bloquées, les couches de protection et le score de détection apparaissent directement sur la page d’accueil du Dashboard de WordPress, avec des liens directs vers le plugin. Sur les installations Multisite, le widget s’affiche sur le Dashboard du réseau et, pour les super-administrateurs, sur les Dashboard des sous-sites avec les chiffres à l’échelle du réseau.
Audit Event Trail (Business)
Une piste d’audit du cycle de vie des utilisateurs en mode « ajout seul » — Logins, échecs de Login, réinitialisations de mot de passe, mises à jour de profil, changements de rôle (y compris l’utilisateur par intérim), inscriptions et détection de nouvelles adresses IP — avec filtres, exportation CSV / JSON, l’intégration de l’exportation/effacement conforme au RGPD de WordPress et le nettoyage des données conservées (1 an pour la formule Business, configurable pour la formule Enterprise). Stocké dans la audit_log (schéma v9). Les journaux de sécurité standard de 30 jours restent disponibles sur toutes les formules ; la piste d’audit constitue l’enregistrement de niveau conformité qui vient s’y ajouter.
MainWP Integration
Hive peut être géré à distance depuis un Dashboard MainWP sans plugin enfant supplémentaire et sans extension MainWP à acheter. Il s’intègre au filtre « MainWP Child » mainwp_child_extra_execution , de sorte que chaque tâche est authentifiée par le canal MainWP Child existant — pas d’identifiants supplémentaires, pas de nouvelle surface d’attaque. La configuration est simple : installez MainWP Child et Hive sur le site géré, connectez le site à votre Dashboard MainWP comme d’habitude, et le tour est joué.
Deux types de tâches sont pris en charge :
- Synchronisation des métriques de sécurité — uniquement les comptages agrégés : blocages actifs, taille de la Whitelist, tentatives de Login échouées, spam dans les commentaires, blocages liés à la réputation, taille de la file d’attente, événements critiques récents, utilisateurs utilisant l’authentification à deux facteurs (2FA). Depuis la version 2.1.6, la synchronisation rend également compte de l’état du pare-feu (
waf_enabled,waf_report_only,waf_dropin_enabled,waf_dropin_running,waf_serverainsi qu’un indicateur dérivéwaf_needs_setup), ce qui permet à un Dashboard de signaler les sites dont la « Extended Protection » est activée mais ne fonctionne pas encore — généralement un hôte nginx qui attend toujours son snippet serveur. - Provisionnement (
reportedip_hive_provision) — envoie une API Key à un site géré depuis le Dashboard de confiance et, depuis la version 2.1.12, permet en option de le basculer en mode « Community Network » au cours de la même tâche (communityindicateur). La tâche de synchronisation signale l’état actuel de chaque site enfantoperation_mode.
Aucune adresse IP, aucun nom d’utilisateur, aucun Secret ni aucune API Key ne quittent jamais le site géré — la Payload de la synchronisation se compose uniquement de comptes et d’indicateurs d’état.
Réseaux multisites
La Full Edition est réservée aux réseaux (Network: true, depuis la version 2.0.0) : l’activation par site est masquée par WordPress afin que la configuration de sécurité reste uniforme sur l’ensemble du réseau. Les neuf tables se trouvent toutes sous $wpdb->base_prefix, ce qui fait que chaque décision relative aux menaces s’applique à l’ensemble du réseau : les tentatives de Brute-Force inter-sites sont agrégées dans un compteur central, et un seul blocage exclut l’adresse IP de tous les sous-sites simultanément.
- Les administrateurs du réseau disposent de l’ensemble des paramètres et d’une vue des journaux pour tous les sites.
- Les administrateurs de site sur un sous-site disposent d’une interface utilisateur « Statut / Journaux » en lecture seule, ainsi que de deux options de remplacement modifiables par site : le slug « Frontend 2FA » et les rôles supplémentaires pour l’application de l’authentification à deux facteurs (un sous-site peut appliquer l’authentification à deux facteurs à davantage de rôles, mais jamais à moins).
- Cron ne s’exécute que sur le site principal — pas de synchronisations en double ni de nettoyages par sous-site.
- Les WAF Exceptions concernent l’ensemble du réseau et sont gérées par l’administrateur réseau.
Authentification à deux facteurs (2FA)
Quatre méthodes sont prises en charge et peuvent être combinées par utilisateur. Les Recovery Codes sont générés lors de la première configuration. Les Secrets sont chiffrés au repos (libsodium avec un repli sur OpenSSL).
- TOTP — RFC 6238 (6 chiffres, fenêtre de 30 secondes). Compatible avec Google Authenticator, Authy, 1Password, Bitwarden, …
- E-mail — mot de passe OTP à six chiffres via le fournisseur de messagerie configuré ; débit limité (3 codes toutes les 15 minutes, 5 tentatives de vérification par code, délai de réenvoi de 60 secondes).
- SMS — mot de passe à usage unique (OTP) à six chiffres via le relais SMS managed ReportedIP (formule Professional et supérieures ; voir ci-dessous). Le numéro de téléphone est chiffré au repos.
- WebAuthn — Passkeys, clés de sécurité (YubiKey), authentificateurs de plateforme (Touch ID, Face ID, Windows Hello). Analyseur CBOR interne, aucune dépendance externe.
- Trusted Devices — jetons « se souvenir de cet appareil » (opt-in) avec durée d’expiration configurable (30 jours par défaut). Stockés sous forme de
wp_reportedip_hive_trusted_devicessous forme de hachages SHA-256. - Recovery Codes — 10 codes à usage unique
xxxx-xxxx; alerte de niveau de code faible lorsqu’il en reste ≤ 3.
Clés de sécurité matérielles (YubiKey)
Depuis la série 2.1.33–2.1.36, les clés matérielles FIDO2 sont pleinement prises en charge : la série YubiKey 5 (USB-A, USB-C, Lightning et les modèles NFC à approcher d’un téléphone), la gamme de clés de sécurité de Yubico et tous les autres authentificateurs CTAP2 fonctionnent sur les trois surfaces de vérification : la page interstitielle wp-login, le défi de la vitrine WooCommerce et la page de réinitialisation du mot de passe. Les anciennes clés U2F uniquement (CTAP1) ne sont pas officiellement prises en charge.
- Configuration : ouvrez votre page de profil (Utilisateurs → Profil → Authentification à deux facteurs), sélectionnez « Ajouter une clé de sécurité » → « Clé de sécurité (USB / NFC) », donnez un nom à la clé, puis insérez-la et touchez le contact doré lorsque le navigateur vous y invite. Sur un téléphone, placez la clé à plat contre l’arrière de l’appareil, près du haut (NFC). Aucun code PIN FIDO2 n’est requis pour l’enregistrement.
- Une clé par compte est gratuite. La formule Business ajoute des clés de sécurité avancées : plusieurs clés par compte — enregistrez une deuxième YubiKey et conservez-la en lieu sûr à titre de sauvegarde — ainsi que la détection automatique du modèle (« YubiKey série 5 avec NFC » s'affiche à côté de la clé) et des alertes par e-mail chaque fois qu'une clé est ajoutée ou supprimée.
- Vous avez perdu votre clé ? Connectez-vous à l’aide de l’un de vos Recovery Codes (ou de votre clé de secours avec le forfait Business), puis supprimez la clé perdue sur la page de votre profil. La suppression de la dernière clé désactive définitivement cette méthode.
- Détection des clones — chaque connexion fait incrémenter le compteur de signatures de la clé. Toute authentification dont le compteur n’augmente pas est rejetée, consignée et signalée au titulaire du compte par e-mail, quel que soit le forfait.
- Algorithmes — ES256 sur chaque clé ; Ed25519 est négocié automatiquement sur le micrologiciel YubiKey 5.2.3+ lorsque le serveur dispose de libsodium.
Protection contre les attaques Brute-Force de l'authentification à deux facteurs (2FA)
auto_block_ip() (événement 2fa_brute_force), ce qui déclenche une escalade progressive et la génération de rapports en mode « Community », comme pour n’importe quel autre capteur.
Headless 2FA REST
Pour les intégrations d’applications, le plugin expose trois routes sous l’espace de noms reportedip-hive/v1:
POST /2fa/challenge— nom d’utilisateur + mot de passe → jeton de défi + méthodes activées (20 requêtes / 5 min par adresse IP).POST /2fa/verify— jeton + méthode + code → définit le cookie d’authentification (30 requêtes / 5 min par adresse IP).GET /2fa/methods— affiche les méthodes actives pour l’utilisateur actuel.
Login front-end WooCommerce
Le Frontend 2FA de Hive s’intègre à votre thème de vitrine actif : les clients se connectant via [woocommerce_my_account], la page de paiement classique ou les blocs « Panier » / « Paiement » de WooCommerce effectuent leur deuxième facteur d’authentification sur une page personnalisée selon le thème. L’état du panier et de la page de paiement est conservé après la redirection, et le cookie de Trusted Device est partagé avec le flux wp-login.
- Chemin de configuration — 2FA → Login en front-end pour WooCommerce.
- Slugs configurables — slug de vérification (par défaut
reportedip-hive-2fa) et slug de configuration (par défautreportedip-hive-2fa-setup) ; tous deux modifiables, soumis à une vérification des conflits, et les règles de réécriture sont automatiquement actualisées en cas de modification. - Rétrogradation de formule — désactivation en douceur sur les formules Free et Contributor ; les paramètres, les choix de slugs et l’état d’intégration sont conservés, aucune perte de données lors de la remontée de formule.
- Détection des conflits — Hive affiche un message d’administration lorsque Solid Security, le plugin WP Two-Factor ou Wordfence 2FA gère le formulaire de Login, et désactive le défi en interface publique pour éviter les doubles invites.
- Disponibilité des formules — Formule « Professional » et supérieures. Les capteurs gratuits d’échec de Login WooCommerce (
woocommerce_login_failed,woocommerce_checkout_login_form_failed_login) restent disponibles sur tous les forfaits et continuent d’alimenter le compteur de Brute-Force.
Envoi d’e-mails et de SMS
La couche de messagerie fonctionne via un contrat de fournisseur modulable (ReportedIP_Hive_Mailer). Le fournisseur par défaut est WordPress wp_mail() ; les intégrateurs peuvent le remplacer par leur propre fournisseur sans modifier le reste du plugin. À partir de la formule Professional, les e-mails transactionnels (codes 2FA, notifications de sécurité) peuvent être acheminés via le Mail Relay géré de ReportedIP — une infrastructure d’expédition conforme aux normes SPF, DKIM et DMARC —, ce qui évite que les e-mails contenant des codes OTP ne finissent dans les spams, contrairement à ce qui arrive souvent avec un wp_mail() provenant d’un hébergement mutualisé.
- L'authentification à deux facteurs par SMS est une fonctionnalité de la version « Professional » fournie exclusivement via le relais géré de ReportedIP.com — aucun compte SMS personnel, identifiants Twilio ou contrat avec un opérateur n'est requis. Elle est configurée automatiquement avec un forfait payant ; activez-la sous Paramètres → 2FA → SMS. Le délai de réenvoi par destinataire augmente progressivement (
0 s → 30 s → 1 m → 2 m → 5 m → 15 m), ce qui permet de redemander un SMS lent ou non reçu sans pénalité, tandis qu’un véritable pic de trafic reste limité. - Allocations mensuelles et forfaits prépayés. La formule PRO inclut 25 SMS / 500 e-mails par mois, la formule Business 75 / 2 500 (par licence). Les forfaits prépayés viennent compléter ces quotas — consultez le tableau des formules ci-dessus pour connaître les tarifs et le paragraphe sur l’ordre de consommation des forfaits pour savoir exactement ce qui se passe lorsqu’un quota est épuisé (spoiler : les e-mails reviennent à la solution locale
wp_mail(), aucune méthode de 2FA n’est jamais désactivée). - Modèles d’e-mails personnalisés (à partir de la formule Business). La formule Business débloque les e-mails transactionnels White-label : votre logo, vos couleurs et votre identité d’expéditeur apparaissent sur les e-mails d’authentification 2FA et de notification à la place de la marque ReportedIP, en cohérence avec le Setup Wizard et les pages 2FA White-label.
Aperçu de la configuration
Tous les paramètres se trouvent sous ReportedIP Hive → Paramètres. Les valeurs par défaut les plus importantes :
| Paramètre | Valeur par défaut | Description |
|---|---|---|
operation_mode | Local Shield | Local Shield ou Community Network. |
block_threshold | 75 % | Confidence Score minimum pour bloquer une adresse IP (mode Communauté). |
login_threshold / _timeframe | 5 / 15 min | Nombre de tentatives de Login infructueuses par adresse IP avant le blocage automatique. |
comment_spam_threshold / _timeframe | 5 / 60 min | Nombre de commentaires par adresse IP avant le blocage automatique. |
scan_404_threshold / _timeframe | 12 / 2 min | Nombre de pages 404 par adresse IP avant le blocage du scanner. |
xmlrpc_threshold / _timeframe | 10 / 60 min | Nombre de requêtes XMLRPC par adresse IP avant blocage automatique. |
rest_burst_threshold / _timeframe | 240 / 5 min | Requêtes REST anonymes par adresse IP. Contournement des pages de consentement. |
block_duration_hours | 24 h | Blocage de durée fixe (utilisé lorsque l'échelle est désactivée). |
block_escalation_enabled + block_ladder_minutes | Activé — 5, 15, 30, 1 440, 2 880, 10 080 | Échelle progressive (minutes par étape). |
report_mode | Actif | active (bloc) ou report_only (journal sans blocage). |
data_retention_days | 30 jours | Durée de conservation des journaux de sécurité avant leur suppression automatique. |
auto_anonymize_days | 7 jours | Anonymiser l'adresse IP et l'agent utilisateur sur les lignes de journal datant de plus de N jours. |
cache_duration / negative_cache_duration | 24 h / 2 h | Durée de vie (TTL) du cache ETag pour les recherches de réputation positive / négative. |
max_api_calls_per_hour | 100 | Limite souple pour répartir l'utilisation de l'API tout au long de la journée. |
2fa_enforce_roles | (vide) | Rôles séparés par des virgules avec 2FA obligatoire. |
2fa_grace_days | 7 | Jours avant que la mesure ne bloque effectivement l'accès aux utilisateurs non inscrits. |
2fa_trusted_device_days | 30 | Expiration du jeton d’un Trusted Device. |
hide_login_enabled / _slug / _response_mode | Désactivé — — page_de_blocage | Slug Login personnalisé ; l’ancienne URL renvoie la page de blocage ou une erreur 404. |
Tables de la base de données
Neuf tables, créées lors de l’activation et préfixées wp_reportedip_hive_. Version de schéma 15, avec migration idempotente étape par étape à chaque mise à jour du plugin ; suppression optionnelle lors de la désinstallation. En Multisite, toutes les tables se trouvent sous $wpdb->base_prefix , de sorte que les décisions relatives aux menaces s’appliquent à l’ensemble du réseau.
logs— événements de sécurité, détails JSON, niveau de gravité, indicateur « signalé » ; source des analyses du Dashboard (tendances sur 7, 30 et 90 jours, répartition par famille et par niveau de gravité, principaux attaquants).whitelist— adresses IP et plages CIDR de confiance ; expiration facultative.blocked— blocages actifs (manuels / automatiques / basés sur la réputation), avecblocked_until.attempts— des compteurs par IP et par type de tentative, avec horodatage de la première et de la dernière tentative ; opération « upsert » atomique et à sécurité anti-concurrence sur une clé unique (IP, type de tentative) depuis la version v15 du schéma.api_queue— rapports en attente et ayant échoué vers l’API communautaire ; logique de nouvelle tentative.stats— agrégats quotidiens (Logins échoués, blocages, spam, XML-RPC, réputation) pour les résumés de tendances et les rapports.trusted_devices— jetons d’authentification 2FA (hachages SHA-256), adresse IP et nom de l’appareil, date d’expiration.audit_log— piste d’audit du cycle de vie des utilisateurs en mode « ajout seul » (Business) ; ajoutée dans le schéma v9.waf_exceptions— Allowlist WAF gérée par le backend (portée : règle / groupe / chemin d’accès, IP/CIDR en option) ; ajoutée dans le schéma v10, à l’échelle du réseau.
Shortcodes front-end et pied de page automatique
Intégrez un petit badge « protégé par Hive » n’importe où sur le site. Tous les codes courts génèrent un seul <rip-hive-banner> composant web et récupèrent les chiffres en temps réel à partir d’un cache temporaire de 6 heures (aucun appel API par page vue).
[reportedip_badge]— petit badge (ton de protection par défaut).[reportedip_stat]— statistique unique (ton « confiance » par défaut).[reportedip_banner]— grande bannière (ton « communauté » par défaut).[reportedip_shield]— icône en forme de bouclier (ton « Contributor » par défaut).
Attributs communs : stat (par exemple attacks_30d, reports_total), tone (protect / trust / community / contributor), color, background, label, intro. Le pied de page automatique de l’assistant utilise le même composant, avec une variante et un alignement configurables.
Référence WP-CLI
Les outils d’authentification à deux facteurs (2FA), le Hardening Mode et (depuis la version 2.1.41) la recherche d’adresses IP de la communauté sont entièrement scriptables :
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
wp reportedip hardening <status|activate|deactivate>
wp reportedip lookup <ip> [--format=<table|json|csv|yaml>]
Compatibilité avec les plugins de cache
Depuis la version 1.5.2, la réponse de la page bloquée définit DONOTCACHEPAGE, DONOTCACHEDB et DONOTCACHEOBJECT (respectée par WP Rocket, W3 Total Cache, WP Super Cache et LiteSpeed Cache) et émet explicitement Cache-Control: no-store, no-cache, must-revalidate, max-age=0, Pragma: no-cache ainsi que le WordPress nocache_headers() . Un seul attaquant bloqué ne peut plus polluer le cache de la page avec un code 403 que les visiteurs légitimes recevraient autrement jusqu’à l’expiration du cache.
Filtres et crochets d’action
apply_filters('reportedip_hive_external_url', $url, $context)— remplacez n’importe laquelle des URL externes (politique de confidentialité, inscription, FAQ, …).apply_filters('reportedip_hive_rest_bypass_routes', $routes)— étendez la liste des préfixes de routes REST qui contournent le moniteur de rafales (intégrations de bannières de cookies).apply_filters('reportedip_hive_scan_paths', $paths)— étendez la liste des chemins d’accès aux Honeypots pour le détecteur d’analyse.apply_filters('reportedip_hive_decoy_paths', $paths)— étendre la liste des chemins leurres.apply_filters('reportedip_hive_waf_bypass_routes', $routes)— exclure des routes REST du WAF au niveau du code (correspondance de préfixe ancré par rapport à la route résolue ; vide par défaut). Privilégiez les WAF Exceptions gérées par le backend pour les False Positives ponctuels.apply_filters('reportedip_hive_mail_provider', $provider)— Intégrez votre propre fournisseur de messagerie (implémentezinterface-mail-provider.php).apply_filters('reportedip_hive_blocked_page_strings', $strings, $context)— Remplacer les textes destinés aux visiteurs sur la page de blocage 403 (White-label ; clésdoc_title,title,message,reason). Depuis la version 2.1.41.apply_filters('reportedip_hive_reputation_block_hours', 24)/apply_filters('reportedip_hive_tor_block_hours', 24)— durée des blocages temporaires liés à la réputation et aux nœuds de sortie Tor.do_action('reportedip_hive_threshold_exceeded', $ip, $event_type, $details)— déclenché à chaque détection confirmée par un capteur, quels que soient les paramètres de blocage automatique et de notification. Depuis la version 2.1.41.do_action('reportedip_hive_ip_blocked', $ip, $reason, $blocked_until)— déclenché lorsqu’une adresse IP est bloquée ;$blocked_untilil s'agit d'une date-heure UTC ounullpour les blocages permanents.do_action('reportedip_hive_ip_unblocked', $ip)— déclenché lorsqu’un blocage est levé.do_action('reportedip_hive_report_queued', $ip, $category_ids, $report_type)— déclenché une fois par rapport entrant dans la file d’attente de l’API (identifiants de catégorie séparés par des virgules ;negativeoupositive).do_action('reportedip_hive_access_denied', $ip, $context)— déclenché juste avant l’affichage de la page de blocage 403. Depuis la version 2.1.41.
Foire aux questions
Les questions qui nous sont le plus souvent posées. Chaque réponse renvoie, le cas échéant, à la section correspondante ci-dessus.
Généralités
Qu'est-ce que Hive, et quel est son lien avec ReportedIP ?
ReportedIP Hive est le plugin WordPress que vous installez sur votre site. ReportedIP (reportedip.com) est le service central qui agrège la Threat Intelligence. Hive peut fonctionner de manière totalement autonome (Local Shield) ou communiquer avec le service (Community Network) — ces deux modes sont tout aussi performants l’un que l’autre.
Ai-je besoin d'un compte pour utiliser le plugin ?
Non — Local Shield fonctionne sans compte ni API Key. Vous n’avez besoin d’un compte ReportedIP gratuit que si vous souhaitez activer Community Network, qui ajoute des vérifications de réputation par rapport à Hive et partage en retour des rapports d’attaques anonymisés.
Combien cela coûte-t-il ?
Le plugin lui-même est gratuit sous licence GPLv2+. Local Shield ne nécessite jamais de forfait payant. Community Network propose une formule Free ; les formules supérieures augmentent les quotas quotidiens de vérifications et de rapports. Consultez le Dashboard pour connaître les quotas actuels.
Le plugin est-il disponible sur WordPress.org ?
Il existe deux éditions. Hive Light est publié sur WordPress.org sous le slug reportedip-hive — protection contre les tentatives de connexion par Brute-Force et vérification communautaire en option, sans authentification à deux facteurs (2FA) ni vente incitative. L’Full Edition décrite sur cette page est distribuée via GitHub Releases avec des mises à jour en un clic gérées par le Plugin-Update-Checker intégré. La raison de ces deux éditions : les directives de wp.org interdisent les ventes incitatives, les relais payants gérés et les systèmes de niveaux Multisite — autant de fonctionnalités sur lesquelles repose l’Full Edition. Consultez les Docs de Hive Light pour le plugin distribué par wp.org. Important : n’installez pas les deux plugins sur le même site — ils partagent le même domaine de texte et le même préfixe de classe.
Où se trouve le code source ? Puis-je l’examiner ?
Oui — le code source complet est disponible sur GitHub.com/ReportedIP/ReportedIP-Hive. Les tickets, les pull requests, le Changelog et les exécutions CI sont tous publics.
Installation et configuration
Comment installer le plugin ?
Téléchargez reportedip-hive.zip à partir de la dernière version disponible sur GitHub Releases, puis dans WordPress : Plugins → Ajouter → Télécharger un plugin, sélectionnez le fichier ZIP, cliquez sur « Installer maintenant », puis sur « Activer ». Le Setup Wizard se lance automatiquement.
J’ai ignoré le Setup Wizard — comment puis-je le relancer ?
Dans Paramètres → ReportedIP Hive, en haut de la page, vous trouverez un lien « Relancer le Setup Wizard ». Le Setup Wizard est non destructif : il affiche les valeurs actuelles comme valeurs par défaut, ce qui vous permet de parcourir les étapes et de ne modifier que ce dont vous avez besoin.
Comment passer du mode « Local Shield » au mode « Community Network » ?
Paramètres → Connexion → Mode de fonctionnement. Aucune donnée n’est perdue lors du changement. Le passage au « Community Network » nécessite une API Key valide.
Puis-je importer des paramètres depuis un autre site ?
Oui — Paramètres → Importer / Exporter. L’exportation se fait au format JSON, avec une limite de 512 Ko pour le téléchargement. Pour des raisons de sécurité, les API Keys et les Secrets 2FA ne sont pas inclus ; tout le reste (seuils, échelles, Whitelist, slug de connexion masqué) est transférable.
Comment fonctionnent les mises à jour ?
Plugin Update Checker v5.6+ interroge GitHub Releases toutes les 12 heures. Les nouvelles versions apparaissent dans Plugins comme n’importe quelle autre mise à jour — installation en un clic. Le format de la balise doit être vX.Y.Z; le workflow release.yml valide l’en-tête + la constante + la balise « stable » du fichier README.
Modes et capteurs
Quelles informations sont exactement partagées avec la communauté lorsque je suis en mode « Community Network » ?
Trois éléments par attaque : l’adresse IP de l’attaquant, la Threat Category (par exemple, Brute-Force, spam dans les commentaires, XML-RPC, scanner) et un horodatage. À cela s’ajoute la API Key de votre site afin que le rapport puisse être attribué à son auteur. Rien d’autre : ni noms d’utilisateur, ni mots de passe, ni contenu des commentaires, ni données des utilisateurs finaux, ni URL de sites dans la Payload.
Quels sont les seize capteurs et puis-je en désactiver certains individuellement ?
Consultez la section « Les seize Attack Sensors » ci-dessus pour obtenir la liste complète et les valeurs par défaut. Oui — chaque Attack Sensor dispose d’un bouton d’activation/désactivation principal et de curseurs de réglage des seuils et des plages horaires dans Paramètres → Protection. Vous pouvez également désactiver un Attack Sensor dans son intégralité sans désactiver les autres.
Qu’est-ce que le « Report-Only Mode » ?
Le plugin enregistre tout mais ne bloque rien. Utile lorsque vous ajustez les seuils sur un site très fréquenté et que vous souhaitez voir ce qui aurait été bloqué avant d’activer le commutateur. Paramètres → Protection → Report-Only Mode.
Comment fonctionne la Progressive Block Escalation ?
Échelle par défaut : 5 min → 15 min → 30 min → 24 h → 48 h → 7 j. Chaque blocage répété pendant la période de réinitialisation (30 jours par défaut) fait passer le compte à rebours d’un cran. Après 30 jours sans incident, l’adresse IP recommence à l’étape 1. Les cas de CGNAT et les erreurs de saisie des administrateurs sont résolus en quelques minutes ; les attaquants persistants atteignent 7 jours. Activable/désactivable ; revient au blocage fixe block_duration lorsqu’elle est désactivée.
En quoi consiste la fonctionnalité « Hide Login » ?
Elle remplace /wp-login.php par un slug personnalisé (3 à 50 caractères, les slugs figurant sur la Blacklist sont rejetés). L’ancienne URL renvoie soit une page de blocage Hive, soit une erreur 404 standard — à vous de choisir. Les flux REST, AJAX, WP-CLI et de réinitialisation de mot de passe sont automatiquement contournés afin de continuer à fonctionner. Réduit considérablement la surface d’attaque contre les attaques par force brute automatisées.
Lorsque la fonctionnalité Hide Login est activée, les accès directs répétés à l’ancienne /wp-login.php provenant d’une même adresse IP sont considérés comme un scan et bloqués selon la procédure d’escalade standard. Une seule visite accidentelle reste inoffensive — seul un schéma récurrent déclenche un blocage. Ajustez le seuil ou désactivez le blocage dans Paramètres → Hide Login.
Depuis la version 2.1.19, la page de Login personnalisée est compatible avec la mise en cache des pages : elle se désactive de tous les caches de pages connus (WP Rocket, W3 Total Cache, WP Super Cache, WP Fastest Cache, Comet Cache, Cache Enabler, Hummingbird, LiteSpeed Cache) et respecte la convention de permaliens avec barre oblique finale du site ; la connexion fonctionne donc de manière fiable derrière les caches et sur les sites nginx qui imposent l’utilisation de la barre oblique finale.
2FA
Quelles méthodes d’authentification à deux facteurs (2FA) Hive prend-il en charge ?
Quatre : TOTP (RFC 6238 — Google Authenticator, Authy, 1Password, Bitwarden, …), OTP par e-mail, OTP par SMS (via le relais géré, formule Professional), WebAuthn (Passkeys, YubiKey, Touch ID, Face ID, Windows Hello). Sans oublier les Recovery Codes à usage unique et les jetons de Trusted Devices.
Puis-je imposer la 2FA uniquement à certains utilisateurs ?
Oui — sélectionnez les rôles dans Paramètres → 2FA → Rôles concernés. Les utilisateurs concernés sont guidés par un assistant de configuration en 5 étapes lors de leur premier Login, avec un délai de grâce configurable (7 jours par défaut). Depuis la version 2.1.22, le comportement par défaut une fois la période de grâce et le quota de tentatives épuisés est l’inscription forcée, et non un verrouillage : l’utilisateur est connecté et redirigé directement vers le Setup Wizard sans option de contournement. L’ancien comportement de verrouillage définitif est disponible sous la forme de la politique « Bloquer la connexion » — mais les administrateurs et les super-administrateurs suivent toujours la voie de l’inscription forcée, de sorte qu’un site ne peut jamais perdre son dernier administrateur capable de se connecter.
J’ai perdu mon téléphone / mon générateur d’authentification — comment puis-je me reconnecter ?
Utilisez l’un des dix Recovery Codes que vous avez enregistrés lors de la configuration de la 2FA. Si vous les avez également perdus, un administrateur peut réinitialiser la 2FA pour n’importe quel utilisateur sous Utilisateurs → 2FA. En dernier recours absolu : wp reportedip 2fa reset <user_id> via WP-CLI / SSH.
Combien de temps un « Trusted Device » reste-t-il de confiance ?
Configurable ; par défaut, 30 jours. Le jeton est un hachage SHA-256 stocké dans wp_reportedip_hive_trusted_devices avec l’adresse IP et le nom de l’appareil. Le capteur d’anomalies géographiques peut révoquer automatiquement les jetons des Trusted Devices en cas de changement de pays ou d’ASN.
WebAuthn fonctionne-t-il sur tous les navigateurs ?
Les versions récentes de Chrome/Edge/Safari/Firefox sur macOS, Windows, iOS et Android — oui. WebAuthn nécessite HTTPS (ou localhost pour le développement). Les navigateurs plus anciens ou renforcés ne prenant pas en charge WebAuthn basculent automatiquement vers TOTP/e-mail/SMS.
Puis-je intégrer l’authentification à deux facteurs (2FA) dans une application headless ou mobile ?
Oui — l’espace de noms REST reportedip-hive/v1 expose POST /2fa/challenge, POST /2fa/verify et GET /2fa/methods. Limitation par adresse IP (20 / 30 / illimité par tranche de 5 minutes).
Performances et compatibilité
Hive est-il compatible avec WP Rocket / W3 Total Cache / WP Super Cache / LiteSpeed ?
Oui — depuis la version 1.5.2, la réponse de la page bloquée définit DONOTCACHEPAGE, DONOTCACHEDB et DONOTCACHEOBJECT ainsi que les Cache-Control: no-store, no-cache, must-revalidate, max-age=0, Pragma: no-cache et le paramètre du cœur de WordPress nocache_headers() . Un attaquant bloqué ne peut plus polluer le cache des pages.
Cela fonctionne-t-il derrière Cloudflare ?
Oui. Sélectionnez CF-Connecting-IP comme en-tête d’IP de confiance dans Paramètres → Général et déclarez les plages d’IP publiées par Cloudflare comme sources de proxy de confiance — depuis la version 2.1.41, l’en-tête n’est pris en compte que pour les requêtes provenant d’une adresse proxy déclarée, ce qui empêche le Spoofing. Whitelistez les adresses IP de surveillance de votre origine si vous utilisez Cloudflare comme proxy pour une page d’état.
Qu’en est-il de l’éditeur de blocs WordPress (Gutenberg) qui déclenche plus de 50 appels REST ?
Depuis la version 1.2.2, les utilisateurs connectés ne sont plus soumis au contrôle global des pics de requêtes REST ; seuls les pics provenant d’utilisateurs anonymes sont pris en compte. La condition de correspondance du chemin d’accès du scanner s’applique toujours (ainsi, Gutenberg ne peut pas interroger accidentellement .env). Assurez-vous d’utiliser la version 1.2.2 ou une version plus récente.
Comment limiter l’utilisation de l’API ?
Par défaut, le cache ETag conserve les requêtes positives pendant 24 h et les requêtes négatives pendant 2 h. Augmentez ces deux durées si votre site est peu sollicité. Le Dashboard affiche le quota en temps réel et la file d’attente afin que vous puissiez voir si vous atteignez la limite. Les rapports par lots générés par cron (toutes les 15 min) regroupent les événements individuels.
Hive va-t-il ralentir mon site ?
La vérification de bloc est une requête indexée unique par wp_reportedip_hive_blocked par requête, avec une init priorité 1. La Whitelist est mise en cache en mémoire par requête. Les requêtes de réputation sont asynchrones : la page publique est d’abord affichée, puis le rapport est mis en file d’attente et envoyé lors du prochain cycle de cron.
Confidentialité et RGPD
Le plugin est-il GDPR Compliant ?
Oui — Local Shield n’envoie jamais de données nulle part, Community Network n’envoie que les trois champs ci-dessus, les user-agents sont tronqués à 50 caractères et les adresses IP peuvent être automatiquement anonymisées après un nombre de jours configurable. Le détail complet du traitement des données figure dans notre politique de confidentialité.
Dois-je mentionner Hive dans ma propre politique de confidentialité ?
Oui, si vous utilisez le mode Community Network : indiquez l’utilisation de Hive ainsi que la transmission de l’adresse IP de l’attaquant, de sa catégorie et de l’horodatage à ReportedIP.com. Si vous utilisez uniquement Local Shield, aucune transmission n’a lieu, mais vous traitez tout de même les adresses IP à des fins de sécurité (art. 6, paragraphe 1, point f) du RGPD), ce qui mérite d’être mentionné dans votre politique de confidentialité.
Qu'advient-il de mes données si je désinstalle l'application ?
La désinstallation supprime toutes les wp_reportedip_hive_* tables et supprime toutes les reportedip_hive_* options. Les Reports déjà enregistrés dans la base de données communautaire sont conservés — ils ne permettent pas de vous identifier personnellement (seul le hachage de la API Key permet de les relier à votre site).
Personnalisation et extension
Les visiteurs de la bannière de cookies / du point d'endpoint de consentement sont bloqués — comment puis-je étendre la liste des exceptions ?
Depuis la version 1.5.0, les quatre espaces de noms courants (real-cookie-banner, complianz, borlabs-cookie, cookie-law-info) sont contournés par défaut. Pour une pile personnalisée, interceptez le filtre :
add_filter('reportedip_hive_rest_bypass_routes', function ($routes) {
$routes[] = '/my-consent-plugin/v1';
return $routes;
});
Le pare-feu continue de bloquer une requête légitime sur mon site — comment puis-je résoudre ce problème sans désactiver le WAF ?
Créez une exception WAF — Pare-feu → WAF → WAF Exceptions, ou cliquez directement sur « Autoriser » dans la ligne du journal concernée. Limitez-la à une seule règle sur un chemin d’accès lorsque cela est possible ; une exception à l’échelle du moteur doit toujours comporter une restriction de chemin d’accès ou d’adresse IP afin que le pare-feu ne puisse jamais être désactivé globalement par accident. Les exceptions s’appliquent également au garde « Extended Protection pré-WordPress ». Pour les routes REST, il existe également un filtre au niveau du code, reportedip_hive_waf_bypass_routes. Voir la section « WAF Exceptions » ci-dessus.
Comment ajouter mes propres chemins d’accès Honeypot au détecteur d’analyse ?
Hook reportedip_hive_scan_paths:
add_filter('reportedip_hive_scan_paths', function ($paths) {
$paths[] = '/.aws/credentials';
return $paths;
});
Puis-je créer mon propre fournisseur de messagerie ?
Oui — implémentez interface-mail-provider.php pour la messagerie et en l’enregistrant via le filtre de messagerie (reportedip_hive_mail_provider). Les SMS, en revanche, sont exclusivement acheminés via le relais géré de ReportedIP.com (formule Professional et supérieures) ; il n’y a pas de fournisseur de SMS auto-hébergé à configurer.
D'où proviennent les données des codes courts du front-end ?
D’un cache temporaire de 6 heures. Clés : attacks_30d, attacks_total, blocked_active, whitelist_active, logins_30d, spam_30d, api_reports_30d, reports_total. Les codes courts n’appellent jamais l’API à chaque affichage de page.
Quotas, formules et compte
Quels sont les avantages de chaque rôle ?
Consultez les Docs sur l’authentification pour le tableau complet. En résumé : compte gratuit (1 000 vérifications / 50 Reports par jour), Contributor (5 000 / 200), Professional (25 000 / 1 000), Business (100 000 / 5 000), Enterprise (Illimité), Honeypot (Illimité).
Le Dashboard affiche un arriéré dans la file d’attente — que dois-je faire ?
Ouvrez Paramètres → File d’attente API. Le bouton « Réessayer » (correction 1.2.4) déclenche désormais réellement l’appel API, et ne se contente plus de réinitialiser le statut. Si les tentatives échouent en raison d’un quota, augmentez la durée de mise en cache ou passez à un forfait supérieur.
Puis-je exécuter Hive sur une installation Multisite ou en réseau ?
Oui, entièrement, depuis la version 2.0.0. La Full Edition est réservée au réseau (Network: true) : l’activation par site est masquée par WordPress afin que la configuration de sécurité reste uniforme. Toutes les tables se trouvent sous $wpdb->base_prefix, de sorte qu’une seule décision en matière de menaces s’applique à l’ensemble du réseau : les tentatives de Brute Force inter-sites sont agrégées dans un compteur central et un seul blocage exclut l’adresse IP de tous les sous-sites. Les administrateurs réseau disposent de tous les paramètres et d’une vue des journaux pour l’ensemble des sites ; les administrateurs de site sur un sous-site disposent d’une interface utilisateur en lecture seule pour l’état et les journaux, ainsi que de deux options de remplacement modifiables par site (slug « Frontend 2FA » et rôles supplémentaires d’application de la 2FA). Cron ne s’exécute que sur le site principal.
Dépannage
Le plugin ne bloque aucune adresse IP
Vérifiez si le Report-Only Mode est activé — il consigne les menaces sans les bloquer. Vérifiez également que le seuil de blocage n’est pas défini trop haut (75 % par défaut) et que le blocage automatique est activé (la stratégie de durée est désactivée lorsque le blocage automatique est désactivé).
Erreurs de connexion à l’API en mode « Community Network »
Assurez-vous que votre serveur peut effectuer des requêtes HTTPS sortantes vers reportedip.com. Certains hébergeurs bloquent les connexions sortantes par défaut. Vérifiez l’API Key sur le Dashboard.
Les visiteurs de la bannière de cookies sont bloqués
Depuis la version 1.5.0, les quatre espaces de noms de consentement courants (real-cookie-banner, complianz, borlabs-cookie, cookie-law-info) sont ignorés par défaut. Si votre pile utilise un espace de noms différent, étendez la liste des exceptions via le reportedip_hive_rest_bypass_routes filtre.
Des utilisateurs légitimes sont bloqués
Ajoutez leurs adresses IP ou leurs plages CIDR à la Whitelist locale. Les adresses IP figurant sur la Whitelist ne sont jamais bloquées, quelle que soit leur réputation.
Vous vous êtes exclu vous-même ? (votre propre adresse IP est bloquée, wp-admin est inaccessible)
Si votre propre adresse IP figure dans la liste de blocage et que wp-admin est inaccessible, vous pouvez rétablir l’accès directement dans la base de données — via phpMyAdmin ou la console de base de données de votre hébergeur. Privilégiez l’interface d’administration (le formulaire de Whitelist comporte une option « Ajouter mon IP » depuis la version 2.1.41) dès qu’elle est accessible ; l’accès direct à la base de données est une solution d’urgence, et non un outil quotidien, car il contourne la validation du plugin.
Ajoutez votre adresse IP publique actuelle à la table de la Whitelist — les adresses figurant sur la Whitelist prévalent sur tout blocage :
INSERT INTO wp_reportedip_hive_whitelist (ip_address, ip_type, reason, added_by, is_active)
VALUES ('203.0.113.42', 'ipv4', 'Self-rescue: restore admin access', 1, 1);
Utilisez 'ipv6' ou 'cidr' comme ip_type pour une adresse IPv6 ou une plage — pour les préfixes IPv6 résidentiels tournants, ajoutez votre réseau /64 à la liste Whitelist en utilisant 'cidr'. added_by correspond à votre identifiant d’utilisateur WordPress (1 pour le premier compte administrateur). Vous pouvez également supprimer votre ligne du tableau de blocage :
DELETE FROM wp_reportedip_hive_blocked WHERE ip_address = '203.0.113.42';
Remplacez le wp_ préfixe par votre préfixe de table réel à partir de wp-config.php s’il diffère (sur un site Multisite, les tables du plugin utilisent le préfixe de base). La modification prendra effet lors de la prochaine requête. Si Extended Protection (le garde pré-WordPress) est actif et que le blocage persiste, supprimez également le fichier de liste de blocage mis en cache wp-content/uploads/reportedip-hive/blocked-*.list — la protection fonctionne en mode « fail-open » et le fichier est recréé automatiquement lors de la prochaine synchronisation.
Le pare-feu bloque une requête légitime (False Positive du WAF)
Ouvrez Pare-feu → WAF, repérez le blocage dans le journal (le X-RIP-Ref code de référence de la page bloquée correspond à une ligne du journal) et cliquez sur Autoriser — cela crée une exception ciblée pour cette règle précise sur ce chemin d’accès. Consultez la section WAF Exceptions pour obtenir des conseils sur la portée des exceptions. Les exceptions s’appliquent également au pare-feu « Extended Protection » pré-WordPress.
Extended Protection est activée mais indique « ne fonctionne pas »
C’est courant sur les hébergements nginx où la directive .user.ini n’est pas prise en compte (par exemple, user_ini.filename désactivée, ou lorsque la racine des documents n’est pas le chemin d’analyse). L’onglet Pare-feu → Configuration du serveur affiche les options manuelles : la ligne PHP-FPM-pool / php.ini auto_prepend_file ou le snippet nginx fastcgi_param . Le statut est vérifiable — il indique si la protection s’est effectivement déclenchée pour la requête en cours. Le moteur intégré à WordPress protège le site dans tous les cas ; le module « drop-in » ne fait qu’avancer ces mêmes vérifications.
Utilisation élevée de l’API / épuisement des vérifications
Les réponses sont mises en cache localement (avec ETag) pendant 24 heures par défaut. Si vous êtes toujours à court de vérifications, augmentez cache_duration ou passez à un forfait supérieur. Surveillez la file d’attente et le quota sur le Dashboard.
Blocage par la 2FA
Utilisez l’un des Recovery Codes enregistrés lors de la configuration de la 2FA. Si vous les avez perdus, un administrateur peut réinitialiser la 2FA pour n’importe quel utilisateur sous Utilisateurs → 2FA. En dernier recours : wp reportedip 2fa reset <user_id>.
Depuis la version 2.1.22, un utilisateur soumis à la 2FA qui n’a jamais configuré cette fonctionnalité n’est plus bloqué par défaut : une fois le délai de grâce et les tentatives autorisées épuisés, il est connecté et directement redirigé vers l’inscription forcée (sans option de report). Les administrateurs et les super-administrateurs Multisite ne peuvent jamais être définitivement bloqués, même si vous réactivez la politique « Bloquer la connexion ».
L’éditeur de blocs (Gutenberg) continue d’être bridé
L’éditeur de blocs déclenche plus de 50 appels REST en quelques secondes. Depuis la version 1.2.2, les utilisateurs connectés ne sont plus pris en compte par le moniteur global de pics de trafic REST ; seuls les pics provenant d’utilisateurs anonymes sont comptabilisés. Assurez-vous d’utiliser la version 1.2.2 ou une version plus récente.
RGPD et confidentialité
Le plugin a été conçu dans le respect de la vie privée et est entièrement GDPR Compliant.
- Mode « Local Shield » : aucune donnée ne quitte votre serveur. Toutes les détections et tous les blocages s'effectuent localement.
- Mode « Community Network » : seules l’adresse IP de l’attaquant, la Threat Category et l’horodatage sont partagés. Aucun nom d’utilisateur, aucun mot de passe, aucun contenu de commentaire, aucune donnée relative à l’utilisateur final.
- Les user-agents sont tronqués à 50 caractères avant d’être stockés.
- Nettoyage automatique : les journaux de sécurité sont supprimés après la période de conservation configurée (30 jours par défaut). L’anonymisation automatique intervient plus tôt (7 jours par défaut).
- Chiffrement au repos : les secrets TOTP, les identifiants WebAuthn et les numéros de téléphone SMS sont chiffrés avec libsodium (repli sur OpenSSL).
- Pas de suivi : pas de cookies, pas de pixels de suivi, pas de télémétrie.
- Intégration aux outils de confidentialité de WordPress : Hive enregistre un exportateur et un effaceur de données personnelles dans le cœur de WordPress ; ainsi, les requêtes effectuées via Outils → Exporter / Effacer les données personnelles incluent automatiquement les enregistrements de Hive concernant le sujet demandé (lignes de journal, Trusted Devices, entrées de piste d’audit). Il propose également un paragraphe à inclure dans le guide de la politique de confidentialité de WordPress (Paramètres → Confidentialité → Guide de la politique) que vous pouvez copier dans votre propre politique.
- Open source : le code source complet est publié sur GitHub — chaque ligne est vérifiable.
Points forts du Changelog
- 2.1.37 – 2.1.41 — Blocage optionnel des nœuds de sortie Tor (version Professional, ensemble de règles signé
tor_exits), plages d’adresses source des proxys de confiance contre le Spoofing d’en-têtes transférés, un widget de sécurité sur le Dashboard wp-admin, un droit de veto « ne jamais bloquer » pour les infrastructures vérifiées par la communauté, une recherche d’adresses IP plus complète avecwp reportedip lookup, des hooks d’intégration stables (reportedip_hive_threshold_exceeded), compteurs de tentatives à l’abri des conflits de concurrence (schéma v15) — ainsi qu’un pare-feu plus strict : les exemptions pour les robots d’indexation nécessitent un signal vérifiable, les groupes de règles de Payload bloquent dès la première occurrence, les versions de publication intègrent à nouveau les ensembles de règles groupés, et quatre règles corrigent la chaîne d’erreurs de l’écran de connexion CVE-2026-64638 (XSS2Shell). Le domaine a été transféré vers ReportedIP.com. - 2.1.33 – 2.1.36 — Prise en charge officielle de YubiKey / des clés de sécurité matérielles : procédures WebAuthn complètes sur les trois surfaces de vérification, gestionnaire multi-clés avec détection de modèle basée sur l’attestation (Business), détection des clés clonées via une régression du compteur de signatures avec des alertes par e-mail sur tous les forfaits, Ed25519 lorsque libsodium est disponible, et une section 2FA du profil réécrite en langage clair avec une méthode par défaut sélectionnable par l’utilisateur.
- 2.1.26 – 2.1.32 — Contrôle croisé des robots d’indexation vérifiés (un user-agent Googlebot usurpé n’achète rien), un mécanisme central de protection « ne jamais bloquer un bot vérifié », des blocages basés sur la réputation de la communauté couvrant toutes les surfaces, la prévention de l’autoblocage pour les adresses du serveur lui-même, la Block Escalation pondérée en fonction du volume, et l’amélioration des performances : 36 → 11 requêtes par demande, lecture d’un en-tête de Blocklist de 8 Ko et TTFB du Dashboard de 920 → 278 ms (schéma v13).
- 2.1.25 — Le WAF bloque la classe d’attaques par confusion de routes REST du cœur de WordPress sur tous les forfaits (règles structurelles, pas de correspondance de jetons), inspecte une copie décodée du corps de la requête (ce qui empêche le contournement par Payload encodé), et les blocages Paranoia-Level 2/3 affichent leur catégorie de référence spécifique.
- 2.1.22 – 2.1.24 — L’authentification à deux facteurs (2FA) imposée par défaut entraîne désormais une inscription obligatoire au lieu d’un verrouillage (les administrateurs et super-administrateurs ne peuvent jamais être définitivement bloqués) ; l’envoi en double du défi 2FA ne bloque plus les utilisateurs sur le message « session expirée » ; la sonde RCE PHPUnit
eval-stdin.php(CVE-2017-9841) est bloquée sur toutes les formules. - 2.1.14 – 2.1.20 — Exactitude de l’hébergement en production : dates et heures conformes à l’UTC (le blocage automatique échouait silencieusement sur les serveurs de bases de données non UTC), Hide Login fonctionne derrière les caches de page et sur les sites utilisant une barre oblique finale ou Nginx, la Extended Protection se configure automatiquement sur nginx + PHP-FPM et ignore l’inspection du corps de la requête pour les éditeurs connectés, la santé de l’API utilise une fenêtre glissante, et l’interrogation du quota de relais sur les chemins fréquents a été supprimée.
- 2.1.9 – 2.1.13 — WAF Exceptions gérées par le backend avec une action « Autoriser » en un clic (schéma v10), journalisation des blocages intuitive (valeur correspondante, cible, méthode, URI, user-agent), le provisionnement MainWP permet de basculer les sites en mode « Communauté », et le Dashboard de sécurité est devenu une vue analytique complète (sept familles de menaces, graphique des groupes de règles WAF, principaux attaquants).
- 2.1.0 – 2.1.8 — Lancement du pare-feu : un « Rule Delivery Framework » fourni par le serveur et signé avec Ed25519, alimentant un Web Application Firewall (WAF) inspectant les requêtes (moteur gratuit + configuration de base « Paranoia-Level-1 », niveaux PRO 2/3 via Priority Sync), Verified Bot Detection, Disposable-Email Blocking, Comment Honeypot, Security Headers (de base gratuits, avancés en version PRO), Protection & Hardening Score sur le Dashboard, codes de référence pour les pages de blocage (
X-RIP-Ref), l’Audit Event Trail d’entreprise (schéma v9), la MainWP Integration et un espace d’administration du pare-feu — suivis de corrections de False Positives pour les robots d’indexation légitimes et de la suppression sans risque des éléments à remplacer. - 2.0.x — Activation multisite à l’échelle du réseau (
Network: true), gestion des niveaux par blog, bannières de mise à niveau, renforcement des moniteurs de mots de passe d’application et d’anomalies géographiques, ouverture de l’authentification à deux facteurs (2FA) en interface utilisateur WooCommerce pour la version PRO+, Hardening Mode contre les attaques coordonnées, détection et signalement des chemins leurres. - 1.5.2 — Compatibilité avec les plugins de cache sur la page 403 ; la limitation de l’authentification à deux facteurs (2FA) évolue vers un véritable blocage par escalade ;
initpriorité 1. - 1.5.1 — Clarté de l’onglet de blocage (Signaler uniquement > Blocage automatique > stratégie de durée) ; permutation en ligne des éditeurs à longueur fixe et à échelle.
- 1.5.0 — Progressive Block Escalation (échelle de 5 m → 7 j) ; Endpoints de la bannière de cookies contournés par défaut ; assouplissement des paramètres par défaut pour les pages 404 et le spam dans les commentaires.
- 1.2.4 — Le bouton « Réessayer » de la file d’attente API déclenche désormais réellement l’appel API.
- 1.2.0 — Sept nouveaux capteurs : surveillance des mots de passe d’application, surveillance des rafales REST, blocage de l’User Enumeration, détecteur de 404/scans, anomalie géographique, force des mots de passe, Hide Login URL.
- 1.1.0 — Système d’envoi d’e-mails centralisé avec modèle personnalisé.
- 1.0.0 — Première version publique : blocage d’adresses IP, 2FA à 4 méthodes, Setup Wizard, tableaux de listes.
Historique complet : Changelog.md sur GitHub.
Vous recherchez la version allégée ?
Dernière mise à jour: · Maintenu par l’équipe ReportedIP