Chiffrer un champ en base de données depuis un module personnalisé

Bonjour,

Pour raison de sécurité et de confidentialité, j’ai besoin de chiffrer le contenu d’un champ en base de données (sous le même principe qu’un mot de passe).
J’ai cherché un peu partout, mais je n’arrive pas à comprendre le mécanisme d’enregistrement ou mise à jours des informations en base de données pour chiffrer ce fameux champ.

Est ce qu’une personne pourrait m’aider ?

je remercies par avance pour votre retour,

Bonjour,

Le chiffrement du mot de passe est effectué avec la fonction dol_hash qui utilise la fonction dédiée php password_hash

Attention, ce n’est pas réversible, une fois chiffré vous ne pouvez pas retrouver la donnée qui a été chiffrée.

dol_hash est définie dans ce fichier

Bonjour Hop,

Merci pour votre retour.
Donc l’utilisation du dol_hash, ne correspond pas à mon besoin.
J’ai besoin de relire la donnée dans d’autre script.

Par contre, comment est appelé la fonction dol_hash sur un module personnalisé ? je n’ai pas vu dans le code l’appel au moment de l’enregistrement.

Pour le password dol_hash est appelé ici

Si vous voulez pouvoir déchiffrer à nouveau vos données il y a les fonctions dolEncrypt et dolDecrypt dans le fichier security.lib.php

Personnellement dans ce cas de figure je préfère utiliser age qui permet de chiffrer avec une ou plusieurs clés publiques.

hop,

Merci pour cette précision.

Mais cela ne répond pas totalement à ma question. Dans le cas de la création d’un module personnalisé, à quel endroit, il faut envoyer l’instruction de de Dol_hash ou dolencrypt ? Je j’ai regarder myobjet_card, je vois bien un champ caché pour action « add » ou « update », mais je n’arrive pas à trouver l’action effectué pour ces 2 actions. Si j’ai bien compris le principe, cela serait à ce moment là que je devrais faire mon chiffrement. non ?

Il faut chiffrer avant d’enregistrer la valeur en BDD, et déchiffrer à la lecture.

Faites une recherche sur dolEncrypt et dolDecrypt dans le code source pour voir comment c’est utilisé

1 « J'aime »

Bonjour
Quel est le type de données ?
Quel intérêt de chiffrer dans la base de données ? Si piratage de votre Dolibarr alors forte chance pour que la clef a fuite.
Attention aussi au pb déchiffrement rechiffrement en cas de migration.
@+

Merci pour les pistes.

La donnée est des mots de passe, que j’ai besoin pour des scripts pour des connexions en API chez des fournisseurs.
Cela va me permettre d’automatiser la lecteur d’information pour remplir des champs dans Dolibarr.
Les mots passe étant stocké en base de données, je souhaiterais les chiffrer pour ne pas les stocker en clair.
Les mots de passe ne sont pas « visibles directement » depuis le module, le champ est du type « password » et je ne vais pas faire de bouton pour le montrer.

Si vous avez une meilleur préconisation, je suis preneur.
Cela me fait réagir sur une chose:

  • Sur Dolistore, il est des modules sur la gestion des mots de passe. cela a donc un non sens ?
  • Pour la partir OAuth, les mots de passes de connexion y sont stockés. Là aussi, c’est un non sens ?

Je gère ce type de données sensibles avec agenix qui utilise age cité plus haut.

Pour simplifier : la donnée secrète est chiffrée avec la clé ssh publique du user sous lequel tourne phpfpm et ma propre clé publique.
Ensuite seul moi même et le user « phpfpm » sur le serveur peuvent déchiffrer la donnée.
Avec agenix on récupère la donnée en clair en lisant le contenu de /var/run/agenix/quelquechose à lire depuis un script php par exemple.
Chaque pool phpfpm tourne avec un user différent, une application php ne peut donc pas lire les données secrètes d’une autre application installée sur le même serveur.

Merci Hop pour ces précisions :slight_smile:

Et encore merci pour la piste, j’ai compris le fonctionnement et comment mettre en place dolEncrypt.

Je vais maintenant me poser un peu et regarder agenix et age.

Encore merci.