web-dev-qa-db-fra.com

Données de chargement du composant personnalisé

Joomla est un nouveau venu et je reprends un projet d'un développeur précédent.

Dans un composant personnalisé, nous capturons les données utilisateur dans un formulaire. Avant que le nom et l'adresse ne soient entrés dans la base de données, les données sont cryptées à l'aide d'une méthode du fichier d'assistance du composant. Le chiffrement fonctionne bien car je peux voir les entrées chiffrées dans la base de données. Le problème semble se produire dans le processus de déchiffrement. Dans la vue d'édition du backend, le formulaire doit charger les données de l'élément. Dans la loadFormData() du modèle juste après $data = $this->getItem(), chacun des champs est déchiffré en appelant la méthode à partir du fichier d'assistance. Cependant, aucune des données cryptées n'est affichée.

J'ai fait du débogage en appelant var_dump($data) avant le déchiffrement pour vérifier que tous les champs étaient présents. Et c'est là que je suis coincé. Je m'attendais à voir les champs chiffrés, mais les champs sont déjà déchiffrés à ce stade. C'est pourquoi cela échoue. J'essaie de déchiffrer des champs qui ont déjà été déchiffrés. Si je supprime les appels de méthode de déchiffrement, les champs s'affichent correctement.

Ma question est la suivante: où le décryptage serait-il effectué si ce n’est pas à l’intérieur de loadFormData()? J'ai regardé à l'intérieur du fichier de table et il n'y a rien. Je ne trouve aucun autre endroit où les champs sont déchiffrés. Je ne veux pas supprimer les appels de décryptage sans savoir avec certitude où les décryptages sont effectués. Le code a été créé à la fin de 2015, alors je me demande si Joomla effectue maintenant le déchiffrement automatiquement.

Toute aide serait appréciée.

MIS À JOUR

Ceci est un exemple d'entrée dans la base de données après le cryptage, il est enregistré comme un type blob avec une extension de fichier .bin: xmELeYzgHFeyEctROCnNnvAKtl16Jmb6c9xUCsvhYvLYA4EFXZwc5mHRDiRiZ + hjQ8MNBil3UvjSDrnBayGjTizRl0FkMI5efB9RuoOkJftg7fxck/Rx4wDTYmlvyxzx | Ge5PqIhKgZFLcNRhS1OCwNxm1e89icnpgRPQ6B9SJm8 =

Et voici la méthode ecrypt:

public static function encrypt($value){
    if(empty($value)){
        return $value;
    }

  $value = serialize($value);

  $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_CBC), MCRYPT_Rand);

  $key = pack('H*', self::$key);

  $mac = hash_hmac('sha256', $value, substr(bin2hex($key), -32));

  $passcrypt = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $value.$mac, MCRYPT_MODE_CBC, $iv);

  $value = base64_encode($passcrypt).'|'.base64_encode($iv);

  return $value;
}

Même si je supprime la méthode decrypt, le champ reste déchiffré. Donc, il est déchiffré en utilisant une autre méthode en plus de la méthode personnalisée.

2
chavab_1

Ce dont vous avez besoin est de rechercher dans tous les fichiers de composant pour trouver les endroits où la fonction Decrypt est appelée.

Vous pouvez ouvrir Nodepad ++, puis appuyer sur CTRL + SHIFT + F, ensuite dans le champ "Rechercher" insérer - déchiffrer ou décoder

Suivant dans le champ "Dossier", insérer - votre_site_site\administrateur\composants\votre_composant ou simplement votre_fichier_composant_composant

Puis appuyez sur "Trouver tout".

Ensuite, en bas, vous verrez une fenêtre avec tous les résultats.

1
KonchenayaTvar

S'il s'agit simplement d'un formulaire et que vous ne faites rien de spécial, nous vous recommandons de créer un nouveau formulaire en utilisant quelque chose de standard, tel que RSForm ou ChronoForms.

Comme le formulaire actuel est personnalisé, vous passerez probablement trop de temps à rechercher quelque chose que vous n'avez pas développé.

Les deux suggestions ci-dessus ont une base d’utilisateurs importante et active, ainsi que des développeurs qui sécurisent leur code.

Pouvez-vous nous fournir une URL à regarder?

0
greenkoi