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.1About 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
- Parametres du constructeur (priorite maximale)
- Variables d'environnement (
CYBERSECMODULE_*) - 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 | * |