it-swarm.com.de

Ladedaten für benutzerdefinierte Komponenten

Ich bin ziemlich neu in Joomla und übernehme ein Projekt von einem früheren Entwickler.

In einer benutzerdefinierten Komponente erfassen wir Benutzerdaten in einem Formular. Bevor der Name und die Adresse in die Datenbank eingegeben werden, werden die Daten mit einer Methode aus der Hilfedatei der Komponente verschlüsselt. Die Verschlüsselung funktioniert einwandfrei, da ich die verschlüsselten Einträge in der Datenbank sehen kann. Das Problem scheint bei der Entschlüsselung aufzutreten. In der Bearbeitungsansicht im Backend sollte das Formular die Daten aus dem Artikel laden. In der loadFormData() im Modell direkt nach $data = $this->getItem() wird jedes der Felder durch Aufrufen der Methode aus der Hilfedatei entschlüsselt. Es werden jedoch keine Daten angezeigt, die verschlüsselt wurden.

Ich habe ein paar Fehler behoben, indem ich var_dump($data) aufgerufen habe, bevor die Entschlüsselung durchgeführt wurde, um sicherzustellen, dass alle Felder vorhanden waren. Und hier stecke ich fest. Ich hatte erwartet, die verschlüsselten Felder zu sehen, stattdessen sind die Felder zu diesem Zeitpunkt bereits entschlüsselt. Das ist der Grund, warum es fehlschlägt. Ich versuche Felder zu entschlüsseln, die bereits entschlüsselt wurden. Wenn ich die Aufrufe der Entschlüsselungsmethode entferne, werden die Felder korrekt angezeigt.

Meine Frage ist, wo sonst würde die Entschlüsselung vorgenommen werden, wenn es nicht in loadFormData() ist? Ich habe in die Tabelle geschaut und dort ist nichts. Ich kann keinen anderen Ort finden, an dem die Felder entschlüsselt werden. Ich möchte die Entschlüsselungsaufrufe nicht entfernen, ohne genau zu wissen, wo die Entschlüsselungen vorgenommen werden. Der Code wurde Ende 2015 erstellt, daher frage ich mich, ob Joomla die Entschlüsselung jetzt automatisch durchführt.

Jede Hilfe wäre dankbar.

AKTUALISIERT

Dies ist ein Beispiel für einen Eintrag in der Datenbank nach der Verschlüsselung, es ist wie als BLOB-Typ mit einer .bin-Datei-Erweiterung gespeichert: xmELeYzgHFeyEctROCnNnvAKtl16Jmb6c9xUCsvhYvLYA4EFXZwc5mHRDiRiZ + hjQ8MNBil3UvjSDrnBayGjTizRl0FkMI5efB9RuoOkJftg7fxck/Rx4wDTYmlvyxzx | Ge5PqIhKgZFLcNRhS1OCwNxm1e89icnpgRPQ6B9SJm8 =

Und das ist die Verschlüsselungsmethode:

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;
}

Auch wenn ich die decrypt -Methode entferne, wird das Feld immer noch entschlüsselt. Es wird also mit einer anderen als der benutzerdefinierten Methode entschlüsselt.

2
chavab_1

Sie müssen alle Dateien der Komponente durchsuchen, um Stellen zu finden, an denen die Entschlüsselungsfunktion aufgerufen wird.

Sie können Nodepad ++ öffnen und dann STRG + UMSCHALT + F drücken. Anschließend im Feld "Suchen" einfügen - entschlüsseln oder entschlüsseln

Als nächstes in das Feld "Ordner" einfügen - Ihr_Site_Pfad\Administrator\Komponenten\com_Ihre_Komponente oder einfach Ihr_Komponenten_Entwickler_Ordner_Pfad

Drücken Sie dann "Alle suchen".

Dann sehen Sie unten ein Fenster mit allen Ergebnissen.

1
KonchenayaTvar

Wenn es sich nur um ein Formular handelt und Sie nichts Besonderes tun, empfehlen wir Ihnen, ein neues Formular zu erstellen, indem Sie ein Standardformular wie RSForm oder ChronoForms verwenden.

Da das aktuelle Formular benutzerdefiniert ist, würden Sie wahrscheinlich zu viel Zeit damit verbringen, nach etwas zu suchen, das Sie nicht entwickelt haben.

Beide oben genannten Vorschläge haben eine große und aktive Benutzerbasis sowie Entwickler, die ihren Code sicher aufbewahren.

Können Sie uns eine URL zum Anschauen geben?

0
greenkoi