modules-communs-php

nwb/cyber-sec-module (0.8.1)

Published 2026-02-09 10:44:07 +00:00 by drone_publisher

Installation

{
	"repositories": [{
			"type": "composer",
			"url": ""
		}
	]
}
composer require nwb/cyber-sec-module:0.8.1

About this package

Module de remontée de piratage pour les applications web

Module Commun de Remontee de Piratage

Module PHP reutilisable pour la detection et remontee automatique d'incidents de securite vers un endpoint centralise.

Installation

composer require nwb/cyber-sec-module

Configuration

Variables d'environnement

export CYBERSECMODULE_TOKEN="votre-token-authentification"
export CYBERSECMODULE_URL="https://n8n.kub.nwb.fr/webhook/signalHackingAttempt"
Variable Obligatoire Description
CYBERSECMODULE_TOKEN Oui (sauf si passe au constructeur) Token Bearer d'authentification
CYBERSECMODULE_URL Non URL de l'endpoint (defaut : endpoint NwB)

Priorites de configuration

  1. Parametres du constructeur (priorite maximale)
  2. Variables d'environnement (CYBERSECMODULE_*)
  3. Valeurs par defaut du module

Utilisation

Signalement basique

<?php
require_once 'vendor/autoload.php';

use Nwb\CyberSecModule\CyberSecModule;

// Le module utilise automatiquement les variables d'environnement
$cyberSec = new CyberSecModule('https://monsite.example.com');

// Signaler une tentative de piratage
$cyberSec->signalHackingAttempt('192.168.1.100', 'Tentative d\'acces a /wp-admin');

Configuration personnalisee

$cyberSec = new CyberSecModule(
    'https://monsite.example.com',          // Site obligatoire
    'https://custom.endpoint.com/webhook',  // Endpoint personnalise (optionnel)
    'token-personnalise'                    // Token personnalise (optionnel)
);

Templates de regles de detection

Le TemplateManager permet de charger des regles de detection predefinies pour identifier les requetes malveillantes.

Templates integres

4 templates sont fournis avec le module :

Template Description
sensitive_files Acces a des fichiers sensibles (.env, .git, phpinfo.php...)
wordpress Tentatives d'acces aux chemins WordPress (wp-login.php, wp-admin...)
directory_traversal Tentatives de traversee de repertoires (../, %2e%2e/...)
security_paths Chemins lies a la securite (security.txt...)
use Nwb\CyberSecModule\TemplateManager;

$manager = new TemplateManager();

// Charger un ou plusieurs templates integres
$manager->loadTemplates(['sensitive_files', 'wordpress']);

// Recuperer les regles chargees
$rules = $manager->getRules();
// Resultat : ['sensitive_files' => ['URI' => [...], 'PATTERNS' => [...]], 'wordpress' => [...]]

// Lister les templates disponibles
$available = TemplateManager::getAvailableTemplates();
// Resultat : ['directory_traversal', 'security_paths', 'sensitive_files', 'wordpress']

Chaque template retourne deux types de regles :

  • URI : chemins exacts a surveiller (ex: /.env, /wp-login.php)
  • PATTERNS : expressions regulieres a appliquer sur l'URI (ex: \.env$, \.\.\/)

Fichier de regles personnalise

Pour utiliser vos propres regles au lieu des templates integres :

$manager = new TemplateManager();
$manager->loadFromFile('/chemin/vers/mes-regles.json');
$rules = $manager->getRules();

Format attendu du fichier JSON :

{
    "URI": [
        {"ma_categorie": ["/chemin-suspect", "/autre-chemin"]},
        {"autre_categorie": ["/admin"]}
    ],
    "PATTERNS": [
        {"ma_categorie": ["\\.bak$", "\\.old$"]}
    ]
}

Important

: les deux modes (templates integres et fichier custom) sont mutuellement exclusifs sur une meme instance. En pratique, chaque requete cree une nouvelle instance, donc il suffit de choisir l'un ou l'autre mode dans votre code.

Exemple d'integration complet

<?php
require_once 'vendor/autoload.php';

use Nwb\CyberSecModule\CyberSecModule;
use Nwb\CyberSecModule\TemplateManager;

// 1. Charger les regles de detection
$manager = new TemplateManager();
$manager->loadTemplates(['sensitive_files', 'wordpress', 'directory_traversal']);
$rules = $manager->getRules();

// 2. Initialiser le module de signalement
$cyberSec = new CyberSecModule('https://monsite.example.com');

// 3. Verifier la requete entrante contre les regles
$requestUri = $_SERVER['REQUEST_URI'] ?? '';
$ip = $_SERVER['REMOTE_ADDR'] ?? '';

foreach ($rules as $category => $categoryRules) {
    // Verification par URI exacte
    foreach ($categoryRules['URI'] as $uri) {
        if (strpos($requestUri, $uri) === 0) {
            $cyberSec->signalHackingAttempt($ip, "Acces suspect ({$category}) : {$uri}");
        }
    }

    // Verification par pattern regex
    foreach ($categoryRules['PATTERNS'] as $pattern) {
        if (preg_match('#' . $pattern . '#i', $requestUri)) {
            $cyberSec->signalHackingAttempt($ip, "Pattern suspect ({$category}) : {$pattern}");
        }
    }
}

Structure des donnees envoyees

{
    "ip": "203.0.113.1",
    "timestamp": "2024-01-15T14:30:00+00:00",
    "pattern": "Tentative de piratage detectee",
    "site": "https://monsite.example.com",
    "emiterInfos": "/var/www/html/index.php | serveur: monserveur | callstack: index.php:42 MyClass->check()"
}
Champ Description
ip Adresse IP de l'attaquant (validee via filter_var)
timestamp Horodatage ISO 8601 UTC
pattern Raison du signalement
site Domaine du site concerne
emiterInfos Informations sur l'emetteur : fichier appelant, hostname, callstack

Securite

  • Authentification Bearer token obligatoire
  • Validation stricte des adresses IP avec filter_var()
  • Retry automatique : 3 tentatives avec backoff exponentiel (1s, 2s, 4s)
  • Transmission HTTPS avec verification SSL
  • Timeout : 2 secondes par tentative
  • Protection path traversal sur les noms de templates

Tests

# Installer les dependances
composer install

# Copier la config et renseigner les variables
cp phpunit.xml.dist phpunit.xml
# Editer phpunit.xml : remplir CYBERSECMODULE_TOKEN et CYBERSECMODULE_URL

# Lancer les tests
composer test

# Lancer un test specifique
vendor/bin/phpunit --filter testNomDuTest

# Verifier le style PSR-12
vendor/bin/phpcs

Structure du projet

src/
  functions.php          # Classe CyberSecModule (signalement)
  TemplateManager.php    # Classe TemplateManager (regles de detection)
  templates/             # Templates de regles integres
    sensitive_files.json
    wordpress.json
    directory_traversal.json
    security_paths.json
tests/
  CyberSecModuleTest.php   # Tests du module de signalement
  TemplateManagerTest.php  # Tests du gestionnaire de templates
phpunit.xml.dist           # Configuration des tests
composer.json              # Dependances et configuration

API Reference

CyberSecModule

// Constructeur
public function __construct(
    string $site,               // Site obligatoire (ex: "https://monsite.com")
    ?string $endpoint = null,   // Endpoint optionnel (defaut: variable env ou URL par defaut)
    ?string $auth_token = null  // Token optionnel (defaut: variable env, obligatoire)
)

// Signaler une tentative de piratage
public function signalHackingAttempt(string $ip, string $reason): void

TemplateManager

// Charger des templates integres (par nom)
public function loadTemplates(array $names): void

// Charger un fichier de regles externe (ancien format)
public function loadFromFile(string $path): void

// Recuperer les regles chargees
public function getRules(): array

// Lister les templates disponibles
public static function getAvailableTemplates(): array

// Reinitialiser (permet de changer de mode)
public function reset(): void

Prerequis

  • PHP 7.4+
  • Composer
  • Extension cURL activee

Changelog

v0.8.0

  • TemplateManager : nouvelle classe pour gerer les regles de detection
  • 4 templates integres : sensitive_files, wordpress, directory_traversal, security_paths
  • Chargement par fichier custom : support de l'ancien format JSON avec normalisation automatique
  • Modes exclusifs : templates integres et fichier custom ne peuvent pas etre melanges
  • Chargement atomique : si un template est invalide, aucune regle n'est ajoutee

v0.7.0

  • emiterInfos : ajout des informations sur l'emetteur (fichier appelant, hostname, callstack)
  • Encapsulation de la construction du callstack pour eviter les erreurs de signalement

v0.3.0

  • Architecture classe : remplacement de la fonction globale par CyberSecModule
  • Namespace : Nwb\CyberSecModule
  • Format de donnees simplifie : payload {ip, timestamp, pattern, site}
  • Configuration hierarchique : constructeur > env > defaut

Licence

Proprietaire - NwB

Mainteneur

Mael Donnart - mael.donnart@nowwweb.com

Dependencies

Dependencies

ID Version
php >=7.4

Development Dependencies

ID Version
phpunit/phpunit *
squizlabs/php_codesniffer *
Details
Composer
2026-02-09 10:44:07 +00:00
99
Maël Donnart
10 KiB
Assets (1)
Versions (16) View all
0.8.1 2026-02-09
0.8.0 2026-02-09
0.7.3 2025-12-31
0.7.1 2025-12-31
0.7.0 2025-12-30