it-empower-solutions/data-redactor

Masquage et sanitisation de données sensibles pour PHP, Laravel, Symfony et Monolog.

Maintainers

Package info

github.com/saberjelassi/it-empower-data-redactor

Homepage

pkg:composer/it-empower-solutions/data-redactor

Transparency log

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.0 2026-09-02 08:35 UTC

This package is auto-updated.

Last update: 2026-09-02 08:41:40 UTC


README

PHP 8.1+ Licence MIT

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, remove et partial ;
  • 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.