it-empower-solutions / data-redactor
Masquage et sanitisation de données sensibles pour PHP, Laravel, Symfony et Monolog.
Package info
github.com/saberjelassi/it-empower-data-redactor
pkg:composer/it-empower-solutions/data-redactor
Requires
- php: ^8.1
Requires (Dev)
- phpunit/phpunit: ^10.5 || ^11.0
Suggests
- illuminate/support: Pour le ServiceProvider et la Facade Laravel.
- monolog/monolog: Pour utiliser le processeur de logs Monolog.
- symfony/config: Pour la configuration du bundle Symfony.
- symfony/dependency-injection: Pour l'intégration au conteneur Symfony.
- symfony/http-kernel: Pour utiliser le bundle Symfony.
README
it-empower-solutions/data-redactor masque les données sensibles avant leur journalisation, leur export ou leur affichage. Le cœur fonctionne avec PHP 8.1+ sans framework ni dépendance d'exécution. Les intégrations Laravel, Symfony et Monolog sont optionnelles.
Le package est développé par IT EMPOWER SOLUTIONS, société spécialisée dans la conception et la sécurisation de solutions numériques.
Fonctionnalités
- parcours récursif des tableaux et objets, avec copie de l'entrée ;
- protection contre les cycles d'objets et profondeur maximale configurable ;
- détection par nom de clé (
password,token,api_key,authorization,secret,cookie, etc.) ; - détection dans le texte des e-mails, téléphones, cartes bancaires, IBAN, Bearer tokens, JWT, IPv4 et IPv6 ;
- validation Luhn avant tout masquage d'un numéro de carte ;
- validation modulo 97 des IBAN ;
- stratégies
mask,hash,removeetpartial; - règles personnalisées ;
- ServiceProvider et Facade Laravel, Bundle et service Symfony, processeur Monolog 1/2/3 ;
- aucune dépendance obligatoire autre que PHP.
Installation
composer require it-empower-solutions/data-redactor
Utilisation PHP
use ItEmpower\DataRedactor\Redactor; $redactor = new Redactor(); $safe = $redactor->redact([ 'user' => [ 'email' => 'alice@example.com', 'ip' => '203.0.113.42', ], 'password' => 'secret', 'card' => '4242 4242 4242 4242', ]);
$safe est une nouvelle structure. Le tableau et les objets d'origine ne sont pas modifiés. Les classes utilisateur sont recopiées sans appeler leur constructeur, leurs propriétés initialisées sont parcourues, et les références cycliques sont conservées dans la copie. Les objets internes natifs de PHP sont clonés mais ne sont pas inspectés.
Configuration
$redactor = new Redactor([ 'default_strategy' => 'partial', 'key_strategy' => 'remove', 'mask' => '***', 'hash_algorithm' => 'sha256', 'hash_salt' => $_ENV['REDACTOR_SALT'] ?? '', 'partial_visible_start' => 2, 'partial_visible_end' => 3, 'max_depth' => 32, 'sensitive_keys' => ['password', 'token', 'api_key', 'private_key'], 'patterns' => [ 'email' => true, 'phone' => true, 'credit_card' => true, 'iban' => true, 'bearer' => true, 'jwt' => true, 'ipv4' => true, 'ipv6' => true, ], 'pattern_strategies' => [ 'email' => 'partial', 'credit_card' => 'mask', 'bearer' => 'remove', ], ]);
La stratégie remove supprime les champs détectés par leur clé. Pour une occurrence détectée au milieu d'un texte, elle retire uniquement l'occurrence. hash produit une valeur préfixée par l'algorithme, par exemple sha256:…. Utilisez un secret stable dans hash_salt si les empreintes ne doivent pas être pré-calculables.
Règles personnalisées
Une règle callback peut exploiter la valeur, la clé et le chemin :
use ItEmpower\DataRedactor\Strategy; $redactor->addCallbackRule( 'customer-reference', static fn (string $value, string|int|null $key, array $path): bool => $key === 'reference' && in_array('customer', $path, true) && str_starts_with($value, 'CUS-'), Strategy::HASH, );
Pour une logique de remplacement plus fine, implémentez ItEmpower\DataRedactor\Rule\RuleInterface, puis appelez addRule().
Laravel
Laravel découvre automatiquement le ServiceProvider et la Facade.
php artisan vendor:publish --tag=data-redactor-config
La configuration est publiée dans config/data-redactor.php. Le service peut être injecté :
use ItEmpower\DataRedactor\Redactor; final class ExportController { public function __construct(private Redactor $redactor) {} public function __invoke(): array { return $this->redactor->redact(request()->all()); } }
Ou utilisé via l'alias DataRedactor :
$safe = DataRedactor::redact($payload);
Symfony
Installez les composants d'intégration si votre projet ne les possède pas déjà :
composer require symfony/http-kernel symfony/dependency-injection symfony/config
Avec Symfony Flex, ajoutez le bundle si nécessaire dans config/bundles.php :
ItEmpower\DataRedactor\Integration\Symfony\ItEmpowerDataRedactorBundle::class => ['all' => true],
Configuration config/packages/it_empower_data_redactor.yaml :
it_empower_data_redactor: default_strategy: mask key_strategy: remove hash_salt: '%env(DATA_REDACTOR_HASH_SALT)%' max_depth: 32 pattern_strategies: email: partial credit_card: mask
Le service ItEmpower\DataRedactor\Redactor est public, autowirable et également disponible sous l'alias it_empower.data_redactor.
Monolog
Monolog n'est pas imposé au projet :
composer require monolog/monolog
use ItEmpower\DataRedactor\Integration\Monolog\RedactionProcessor; $logger->pushProcessor(new RedactionProcessor($redactor)); $logger->info('Connexion', [ 'email' => 'alice@example.com', 'authorization' => 'Bearer private-token', ]);
Le processeur traite context et extra. Il accepte les records tableau de Monolog 1/2 et les objets LogRecord immuables de Monolog 3.
Détection et limites
La détection réduit fortement le risque de fuite, mais ne remplace pas une politique de minimisation des données. Les numéros de carte invalides selon Luhn et les IBAN invalides ne sont volontairement pas masqués afin de limiter les faux positifs. Ajoutez une clé sensible ou une règle personnalisée lorsque votre format métier n'est pas couvert.
La limite de profondeur interrompt le parcours au niveau configuré ; choisissez-la selon la structure de vos données. Une stratégie de hachage est pseudonymisante, pas anonymisante.
Développement
composer install composer validate --strict vendor/bin/phpunit
Les exemples exécutables et les variantes d'intégration sont disponibles dans examples/.
Licence et contact
Distribué sous licence MIT.
Pour une intégration, un audit ou un accompagnement, contactez IT EMPOWER SOLUTIONS à contact@it-empower.com.