veilletech.fr
19 oct. Feed du jour
#01 SYMFONY Article

Symfony 8.2 : #[Encrypted] chiffre vos colonnes

Une ligne chiffre la colonne : à vous de voir ce qu'on ne pourra plus y chercher.

Symfony 8.2 ajoute l'attribut #[Encrypted] : posé sur une propriété d'entité Doctrine, il chiffre la valeur avant l'écriture, la stocke en binaire et la déchiffre à la lecture, grâce au nouveau composant KeyManagement. Les types Doctrine nécessaires sont créés à la compilation du conteneur ; une entité hors de src/Entity/ ou mappée en XML demande une déclaration dans doctrine_dbal.types.

3 min de lectureintermédiairevidéo 1:21
Partager
Sommaire4 sections
  1. Ce qui se passe
  2. Comment ça marche
  3. Ce que ça change, et ce qui manque
  4. À retenir

Ce qui se passe

Le composant KeyManagement, nouveau dans Symfony 8.2, contient un pont Doctrine DBAL dont le type EncryptedType chiffre n'importe quelle colonne, par chiffrement par enveloppe. Le piège tenait à la mise en place : il fallait un type Doctrine distinct pour chaque combinaison de clé et de type de valeur, enregistré avant la première requête. Symfony 8.2 écrit cette plomberie à votre place, de deux façons.

Comment ça marche

Avec l'ORM : l'attribut #[Encrypted]. On le pose sur une propriété mappée, sans déclarer de type personnalisé. Doctrine traite la propriété comme d'habitude (un téléphone reste une chaîne, une date de naissance une date). Avant l'écriture, Symfony chiffre la valeur et la range en binaire ; à la lecture, il la déchiffre, et votre code retrouve une string ou un DateTimeImmutable.

L'argument key désigne la clé maîtresse de votre KMS. Si vous stockez les clés de données en base (option key_management.store), c'est un nom qui regroupe les valeurs chiffrées avec la même clé de données.

À la compilation du conteneur, Symfony cherche les attributs dans les entités, aux endroits où il cherche déjà vos services (src/Entity/ dans la configuration par défaut), et crée les types nécessaires.

Sans l'ORM, ou hors des répertoires scannés : l'option doctrine_dbal.types. Elle déclare les types chiffrés, enregistrés au démarrage du noyau. Ils utilisent l'encrypteur à enveloppe adossé au store si key_management.store est configuré, sinon celui du client par défaut. Une colonne marquée #[Encrypted] réutilise le type déclaré ici pour la même clé et le même type de valeur.

La syntaxe exacte de l'attribut n'est pas reproduite ici : le billet l'illustre par du code, à consulter avec la documentation de Symfony 8.2.

Ce que ça change, et ce qui manque

Source : New in Symfony 8.2: Encrypted Doctrine Columns, blog Symfony, 15 octobre 2026. Source en anglais. Voir aussi A Week of Symfony #1033.