Neu SQL Abfrage - Kundendaten entschlüsseln cNachname & cStrasse

wunderli

Aktives Mitglied
21. September 2015
19
6
Hallo zusammen

Wir stellen in Kürze von Shopware 5 zu JTL 5.22 um. Für unsere Kunden, bieten wir über das Kundenkonto die Möglichkeit auf ein externes Portal zuzugreifen. Dort können Sie für Ihre Geräte Reparaturen anmelden und dahinter ist ein recht umfangreicher Prozess angehängt inkl. Trello Visualisierung und Rückabfragen per API damit der Kunde proaktiv über den aktuellen Stand informiert wird. Jetzt haben wir das Problem, dass wir auf die Kundendaten via SQL zugreifen. Das klappt auch alles tadellos mit der neuen Datenbankstruktur nur haben wir nun bei den Tabellen cNachname und cStrasse verschlüsselte Werte. Mir ist klar das dies mittels Blowfish verschlüsselt wurde und das dieser Key in der Datei /includes/config.JTL- Shop.ini.php abgelegt ist.

Zuerst war die Idee auf die JTL eigene Funktion in der CryptoService zuzugreifen, dies ist aber aufgrund von Zugriffsbeschränkungen nicht möglich. Daran möchte ich eigentlich auch nichts ändern da ich nur minimal in das Setting des Shops eingreifen möchte.
Nun ist meine Idee die Entschlüsselung direkt nach der Abfrage zu tätigen, hat jemand von euch schon mal eine entsprechende Funktion geschrieben? Mein Hauptproblem ist, dass ich nirgends finde mit welcher Blowfish Methode das ganze ent- und verschlüsselt wird, sonst könnte man sich mal die Dokus ansehen. Alle Einträge hier im Forum beziehen sich mehr oder weniger auf Version vor dem JTL Shop 5.

Gruss wunderli
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.043
2.299
Berlin
Firma
css-umsetzung
Ich verstehe die Frage nicht so ganz, bzw. nicht genau wann Ihr denn auf diese Daten zugreifen möchtet um was damit zu tun.

Ihr könnt auf den Crpytoservice zugreifen
$cryptoService = Shop::Container()->getCryptoService();

und dann eben die Daten entschlüsseln wenn Ihr wollt (es muss einen Grund dafür geben das JTL da nen trim verwendet
\trim($cryptoService->decryptXTEA($username))
 
  • Gefällt mir
Reaktionen: wunderli und bzng

wunderli

Aktives Mitglied
21. September 2015
19
6
Ich verstehe die Frage nicht so ganz, bzw. nicht genau wann Ihr denn auf diese Daten zugreifen möchtet um was damit zu tun.

Ihr könnt auf den Crpytoservice zugreifen
$cryptoService = Shop::Container()->getCryptoService();

und dann eben die Daten entschlüsseln wenn Ihr wollt (es muss einen Grund dafür geben das JTL da nen trim verwendet
\trim($cryptoService->decryptXTEA($username))
Hallo css-umsetzung
Da stehe ich jetzt echt am Berg ich kriege immer errors das ich nicht zugriffsberechtigt sei. Das Problem ich greife von extern also ausserhalb der JTL Umgebung darauf zu.

Vielleicht gehe ich es aber auch falsch an, zuerst muss ich den autoloader von JTL laden (require) und dann kann ich auf die JTL Funktion zugreifen richtig?

Vielen Dank übrigens für die rasche Rückmeldung!

Gruss wunderli
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.043
2.299
Berlin
Firma
css-umsetzung
Ich hab das mal schnell ganz einfach gemacht, nur zur Verdeutlichung

Ich würde das normalerweise über ein Plugin regeln und dann mit dem Hook für IO Requests arbeiten, wie gesagt, ich weiss nicht was du da genau machen möchtest.

Um dir zu verdeutlichen was du nur brauchst, ich hab im Hauptverzeichnis eine Datei angelegt, nennen wir Sie einfach test.php, die beeinflusst ja nicht den core und du musst auch nichts am core ändern, in dieser Datei stehen dir dann alle Funktionen, also auch Datenbankabfragen zur Verfügung.

Code:
<?php declare(strict_types=1); // @deprecated since 5.2.0

use JTL\Shop;


require_once __DIR__ . '/includes/globalinclude.php';

$cryptoService = Shop::Container()->getCryptoService();
echo \trim($cryptoService->decryptXTEA("ZQgV9gAFQwelJW5ShvQ+XcsoHZlOYeYb"));

Mehr brauchst du nicht um die Entschlüsselung zu nutzen, den crypto String den hast du dann ja oder holst ihn dir aus der Datenbank, wie auch immer.

Teste das mal aus, da kommt nen ganz normaler Name bei raus.
 
  • Gefällt mir
Reaktionen: wunderli

wunderli

Aktives Mitglied
21. September 2015
19
6
Ich hab das mal schnell ganz einfach gemacht, nur zur Verdeutlichung

Ich würde das normalerweise über ein Plugin regeln und dann mit dem Hook für IO Requests arbeiten, wie gesagt, ich weiss nicht was du da genau machen möchtest.

Um dir zu verdeutlichen was du nur brauchst, ich hab im Hauptverzeichnis eine Datei angelegt, nennen wir Sie einfach test.php, die beeinflusst ja nicht den core und du musst auch nichts am core ändern, in dieser Datei stehen dir dann alle Funktionen, also auch Datenbankabfragen zur Verfügung.

Code:
<?php declare(strict_types=1); // @deprecated since 5.2.0

use JTL\Shop;


require_once __DIR__ . '/includes/globalinclude.php';

$cryptoService = Shop::Container()->getCryptoService();
echo \trim($cryptoService->decryptXTEA("ZQgV9gAFQwelJW5ShvQ+XcsoHZlOYeYb"));

Mehr brauchst du nicht um die Entschlüsselung zu nutzen, den crypto String den hast du dann ja oder holst ihn dir aus der Datenbank, wie auch immer.

Teste das mal aus, da kommt nen ganz normaler Name bei raus.
Das ist etwas anders als ich das wollte, aber ich habe auch direkt auf die CryptoService zugreifen wollen.


Ich habe jetzt einmal eine Funktion gemacht, da ich vermutlich noch mehr auf die Methode zugreifen muss:
Code:
require_once __DIR__ . '/../shops/ch/includes/globalinclude.php';
function decryptData(string $encryptedData): string {
    $cryptoService = Shop::Container()->getCryptoService();
    return trim($cryptoService->decryptXTEA($encryptedData));
}

Ein Testfile sieht nun folgermassen aus:
Code:
<?php
require_once __DIR__ . '/functions.php';
$encrypted_lastname = "ZSGj4AAB+0JPoNXgSawGa1U2zxddcg5l";
$shipping_lastname = decryptData($encrypted_lastname);
echo $shipping_lastname;
?>

Das funktioniert auch tadellos, nur sobald ich 1:1 diesen code in das bestehende Konstrukt in der genau gleichen Ordnerstruktur einbaue, funktioniert ab Header nichts mehr.

Das Problem konnte ich jetzt eruieren: Unser Server läuft auf gewissen VHosts mit 8.1 für die JTL Shops. Der Shopware Shop der abgelöst werden soll aber noch auf 7.4 rennt, da gibt es Plugins, welche einfach nicht neuer rennen. Hier meine Lösung jetzt:


Das Hauptfile:
Code:
function decryptData($encryptedData) {
  $scriptPath = __DIR__ . "/decryption_service.php";
  $command = "/opt/php-8.1/bin/php " . $scriptPath . " " . escapeshellarg($encryptedData);
  return shell_exec($command);
}
//loop through the sql querry
while ($row = mysqli_fetch_assoc($result)) {
  $shipping_lastname = decryptData($row['cNachname']);
  $shipping_street = decryptData($row['cStrasse']) . ' ' . $row['cHausnummer'];
}

Die externe Funktion:
Code:
<?php
require_once __DIR__ . '/../shops/ch/includes/globalinclude.php';
function decryptData(string $encryptedData): string {
    // Your decryption logic remains the same
    $cryptoService = Shop::Container()->getCryptoService();
    return trim($cryptoService->decryptXTEA($encryptedData));
}
// Check if argument is provided
if (isset($argv[1])) {
    try {
        echo decryptData($argv[1]);
    } catch (Exception $e) {
        // Output the exception message to STDERR
        file_put_contents('php://stderr', $e->getMessage());
        exit(1); // Exit with a general error status code
    }
} else {
    echo "No argument provided.\n";
    exit(1); // Exit because there was nothing to process
}
?>

Ich wäre ohne den digitalen Copilot definitiv nicht da wo ich jetzt bin. Die obere Lösung die isoliert funktioniert, wäre mir also wesentlich lieber, die verstehe ich zumindest. Für die untere Lösung benötige ich dann noch Nachhilfe. Aber es ist schon wieder spät. Danke css-umsetzungen du hast mich auf den richtigen Weg gebracht!
 

css-umsetzung

Offizieller Servicepartner
SPBanner
6. Juli 2011
8.043
2.299
Berlin
Firma
css-umsetzung
Ich schrieb ja,
wenn man nicht genau weiß was du da machen möchtest, dann kann man nur sagen wie es normal gehen würde :)
aber wenn es so für dich passt ist ja alles ok
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu JTL_DirectQuery - SQL Abfrage Anzahl der Pakete auf Versandliste (DPD) User helfen Usern - Fragen zu JTL-Wawi 3
Neu Wie lässt sich der Lieferstatus von Aufträgen per SQL abfragen? User helfen Usern - Fragen zu JTL-Wawi 4
Neu JTL Wawi auf Windows Server 2025 mit SQL 2025? Installation von JTL-Wawi 4
Neu JTL Diag / SQL Mitschnitt lässt sich nicht mehr starten User helfen Usern - Fragen zu JTL-Wawi 6
Neu Welche SQL Server Version für WaWi 1.0.0.0.0 unter Windows 11 Installation von JTL-Wawi 6
Neu Bilder von Kinderartikeln auf Vaterartikel kopieren via SQL Eigene Übersichten in der JTL-Wawi 2
Neu Täglich SQL Backup vom Shop Allgemeine Fragen zu JTL-Shop 2
Kann ich mit dieser SQL Version die neue WaWi 1.11.1 installieren? JTL-Wawi 1.11 2
Neu Kundengruppe per SQL löschen User helfen Usern - Fragen zu JTL-Wawi 3
Neu Sql Express 2022 - wawi sagt beim Start es ist ein Update bereit - gelöst Installation von JTL-Wawi 3
Neu Extern erstelltes SQL - Angebot falsche Werte User helfen Usern - Fragen zu JTL-Wawi 3
Neu In welcher SQL Tabelle finde ich den Ansprechpartner des Herstellers? User helfen Usern - Fragen zu JTL-Wawi 2
Neu Seriennummern und SQL Abfragen User helfen Usern - Fragen zu JTL-Wawi 1
Update SQL Server Management Studio JTL-Wawi 1.10 1
Neu Einrichtung SQL in neuem Rechner funktioniert nicht Installation von JTL-Wawi 3
Neu SQL Code für GPSR Felder (Kaufland) zeigt Fehler + wird daher nicht übertragen kaufland.de - Anbindung (SCX) 0
Neu SQL für noch nie Verkaufte Artikel auf Marktplätzen. User helfen Usern - Fragen zu JTL-Wawi 3
Neu Telefonnummer in Kundendaten gelöscht JTL-POS - Fehler und Bugs 0

Ähnliche Themen