Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 13-09-2013 09:47:56

MichaelB
Membre
Date d'inscription: 27-06-2010
Messages: 21

Encryption de données avec BlockCipher dans la base de données?

Hello,

J'ai besoin d'encrypter certaine données sensibles dans ma base de données tel que adresse, téléphone, etc.
après qu'un formulaire soit posté par exemple. J'utilise actuellement TableGateway avec un model comme dans la doc pour accéder/modifier aux données de ma db, tout est ok.

J'aimerai utiliser BlockCipher comme recommandé pour encrypter/décrypter les données, ma question est à quel niveau je dois faire ca. Dans le model ? dans le controller ?

Quelle est la meilleure méthode ?

Voici un service que j'ai créé:

...
'MyBlockCipherService' => function ($sm) {
                   
      $blockCipher = BlockCipher::factory('mcrypt', array('algo' => 'aes'));
      $blockCipher->setKey('test');
                       
      return $blockCipher;
},
...


Je pensais appeler ce service directement dans le model et créer un fonction qui encrypt toutes les variables mais je n'ai pas accès au serviceLocator. Et si j'implémente ServiceLocatorAwareInterface dans mon model, ca créer une boucle et je reçois un "Fatal error: Allowed memory size of 134217728 bytes exhausted"

Merci de votre aide!
Michael

Hors ligne

 

#2 13-09-2013 10:19:01

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Encryption de données avec BlockCipher dans la base de données?

Salut, concernant la méthode je ne connais pas le service que tu veux utiliser par contre une chose est sûre le modèle n'a jamais accès au service !!! Dans une couche MVC idéale tu as quelque chose comme ça :

Contrôleur > Service > Modele

Et la couche enfant n'a pas accès à la couche parente.

Hors ligne

 

#3 13-09-2013 11:52:17

MichaelB
Membre
Date d'inscription: 27-06-2010
Messages: 21

Re: Encryption de données avec BlockCipher dans la base de données?

Merci pour ta réponse.. Donc je dois le faire dans mon controller, entre la validation de mon formulaire et l'insertion ou modification de ma db.

Le $data = $form->getData() après $form->isValid() me retourne mon objet (car j'utilise $form->bind(xx) ) et je dois donc encrypter et réassigner chaque propriété ici avec mon service d'encryptage avant de faire appelle à $this->getUserAddressTable()->edit($data) ??

C’était ma première idée et me parait assez logique mais en meme temps ca me parait assez compliqué à mettre en place dans le cas inverse, lors de la lecture de données pour les afficher dans mon formulaire. Le controller fait appelle au service de la db, je reçois mon objet dans mon controller, je dois reprendre chaque propriété, les décrypter et réassigner les nouvelles valeurs décryptées ?

Partages-tu cette logique ?

Hors ligne

 

#4 13-09-2013 11:58:53

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Encryption de données avec BlockCipher dans la base de données?

Non pas tout à fait, en fait c'est ton service qui enregistre et récupère les données qui doit s'occuper de ça. Donc effectivement dans ce même service tu vas appeler le service d'encryptage mais ça tu as le droit. Le contrôleur doit vraiment servir de contrôleur ! C'est à dire récupérer les données de la requêtes, les valider (éventuellement, pour cette partie certains sont partisan de le faire dans le service d'autre dans le contrôleur), les transmettre aux services puis les renvoyer à la vue.

Hors ligne

 

#5 13-09-2013 14:24:53

MichaelB
Membre
Date d'inscription: 27-06-2010
Messages: 21

Re: Encryption de données avec BlockCipher dans la base de données?

Ok merci je vois ca, effectivement c'est mieux. Donc je propose d'injecter mon service d'encryptage directement dans le service d'accès à la db comme ceci, et après de modifier mon code dans UserAddressTable afin de faire appel à l'encryptage/décryptage...

'Application\Model\UserAddressTable' =>  function($sm) {
                    $tableGateway = $sm->get('UserAddressTableGateway');
                    $blockCipherService = $sm->get('MyBlockCipherService');
                   
                    $table = new UserAddressTable($tableGateway, $blockCipherService);
                    return $table;
                },

Moi ca me parait correcte. T'en penses quoi?

Hors ligne

 

#6 13-09-2013 15:11:30

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Encryption de données avec BlockCipher dans la base de données?

Si UserAddressTable est un service ça me semble correcte. Tu peux pour que ça soit plus propre créer une factory plutôt que d'utiliser les fonctions anonymes.

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages