En vous promenant sur Beamreactor, nous stockons votre IP 48h pour des raisons de sécurité.

Lecteur Markdown

banna Documentation › BANNA_DOCUMENTATION

BANNA_DOCUMENTATION

Banna - Ban Manager #

Gestion des bannissements IP et plages CIDR.

Namespace: `Beamreactor\Plugins\Banna`

Version: 5.0.1

Niveau requis: `BANNA_LEVEL_MODERATOR`

Vue d'ensemble #

Module de bannissement permettant de bloquer des adresses IP individuelles ou des plages CIDR entières. Les bans sont persistants en base de données et vérifiés à chaque requête entrante par le moteur.

Fonctionnalités #

  • Bannissement d'IP individuelles
  • Bannissement de plages CIDR (ex: `192.168.0.0/24`)
  • Motif de bannissement optionnel
  • Historique avec horodatage
  • Pagination de la liste des bans
  • Confirmation JavaScript avant suppression

Actions #

| Action | Description |

|--------|-------------|

| `add` | Ajoute une IP ou plage CIDR à la liste des bans |

| `remove` | Supprime un ban existant |

| `view` | Affiche les détails d'un ban |

Fonctions #

ip_in_cidr #

Vérifie si une IP appartient à une plage CIDR.

ip_in_cidr(string $cidr, string $ip): bool

Paramètres:

  • `$cidr` — Notation CIDR (ex: `192.168.0.0/24`) ou IP simple
  • `$ip` — Adresse IP à vérifier

Retour: `true` si l'IP est dans la plage.

Exemple:

ip_in_cidr('10.0.0.0/8', '10.45.67.89');  // true
ip_in_cidr('192.168.1.0/24', '192.168.2.1');  // false

is_valid_cidr #

Valide une notation CIDR ou une IP simple.

is_valid_cidr(string $cidr): bool

Paramètres:

  • `$cidr` — IP ou notation CIDR à valider

Retour: `true` si valide.

Exemples valides:

  • `192.168.1.1`
  • `10.0.0.0/8`
  • `172.16.0.0/12`

cidr_to_range #

Convertit une notation CIDR en plage lisible.

cidr_to_range(string $cidr): string

Paramètres:

  • `$cidr` — Notation CIDR

Retour: Plage au format `IP_début - IP_fin`.

Exemple:

cidr_to_range('192.168.1.0/24');  // "192.168.1.0 - 192.168.1.255"
cidr_to_range('10.0.0.0/8');      // "10.0.0.0 - 10.255.255.255"

handleAdd #

Traite l'ajout d'un ban.

handleAdd(): void

Valide l'entrée, vérifie les doublons, insère en base. Gère les IP simples et les plages CIDR.

handleRemove #

Supprime un ban.

handleRemove(string $ip): void

Paramètres:

  • `$ip` — IP ou CIDR à débannir

handleView #

Affiche les détails d'un ban.

handleView(string $ip): void

Paramètres:

  • `$ip` — IP ou CIDR à consulter

Informations affichées:

  • Adresse/plage
  • Type (IP simple ou CIDR)
  • Date de bannissement
  • Motif
  • Requête ayant déclenché le ban (si disponible)
  • User-Agent (si disponible)

showList #

Affiche la liste paginée des bans.

showList(int $offset, int $itemsPerPage, int $total, int $page, int $totalPages): void

Structure de la table #

CREATE TABLE banned_ips (
    id INT AUTO_INCREMENT PRIMARY KEY,
    offender VARCHAR(50) NOT NULL,
    motive VARCHAR(255),
    tstamp DATETIME,
    is_cidr TINYINT(1) DEFAULT 0,
    cidr_range VARCHAR(50),
    query TEXT,
    useragent TEXT,
    UNIQUE KEY (offender)
);

Locale #

Clés utilisées dans `$dialban`:

| Index | Description |

|-------|-------------|

| 0 | Label date |

| 2 | Message suppression OK |

| 3 | Message ajout OK |

| 4 | Bouton ajouter |

| 6 | Lien retour |

| 7 | User-agent inconnu |

| 8 | Placeholder IP |

| 9 | Label motif |

| 12 | Message liste vide |

| 13 | Bouton supprimer |

| 14 | Motif par défaut |

| 15 | Label actions |

| 16 | Placeholder motif |

| 17 | Erreur doublon |

| 18 | Erreur IP invalide |

| 19 | Titre formulaire |

| 20 | Aide format CIDR |

| 21 | Message ajout CIDR |

| 22 | Label plage couverte |

| 23 | Erreur ban introuvable |

| 24 | Titre détails |

| 25 | Label adresse |

| 26 | Label type |

| 27 | Type plage |

| 28 | Label étendue |

| 29 | Type IP simple |

| 30 | Label requête |

| 31 | Label user-agent |

| 32 | Titre confirmation |

| 33 | Message confirmation |

Utilisation #

Bannir une IP #

POST ?obj=banna.php
ban=add
IP=192.168.1.100
motive=Spam répété

Bannir une plage #

POST ?obj=banna.php
ban=add
IP=45.0.0.0/8
motive=Datacenter malveillant

Vérifier un ban (depuis un autre module) #

$ip = $_SERVER['REMOTE_ADDR'];
$banned = SQL::queryValue(
    "SELECT 1 FROM banned_ips WHERE offender = ? OR (is_cidr = 1 AND ? REGEXP REPLACE(offender, '/', '.*'))",
    [$ip, $ip]
);

// Ou utiliser ip_in_cidr pour une vérification précise
$bans = SQL::query("SELECT offender FROM banned_ips");
foreach ($bans as $ban)
{
    if (ip_in_cidr($ban['offender'], $ip))
    {
        // IP bannie
        break;
    }
}

Notes #

  • Les plages CIDR larges (`/8`, `/16`) peuvent couvrir des millions d'adresses
  • Le masque doit être entre 0 et 32
  • La suppression d'un ban CIDR libère toute la plage
  • Les bans sont vérifiés par le moteur avant tout traitement de requête
de en fr