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
7.476
2.061
Berlin
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
7.476
2.061
Berlin
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
7.476
2.061
Berlin
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
SQL-Abfrage – Stückliste-Artikel ausblenden, nur einzelne Positionen anzeigen JTL-Wawi 1.9 3
SQL-Abfrage für eigene Übersicht im Verkauf – Aufträge zu Angeboten prüfen JTL-Wawi 1.9 2
Neu Suche SQL Abfrage für Hersteller die keinem Artikel mehr zugeordnet sind. User helfen Usern - Fragen zu JTL-Wawi 6
Neu SQL Abfrage für offene Aufträge über Ameise User helfen Usern - Fragen zu JTL-Wawi 5
SQL Abfrage bei Workflow Datei Schreibn JTL-Wawi 1.9 1
Neu SQL-Abfrage von im Onlineshop aktiven Artikeln JTL Ameise - Eigene Exporte 2
Neu keine verbindung zu eazybusiness / SQL Datenbank Installation von JTL-Wawi 1
Über SQL Abfragen, Preise eines SCX Angebotes ändern kaufland.de - Anbindung (SCX) 6
Neu Auftragsview per Ameise oder SQL in CSV exportieren User helfen Usern - Fragen zu JTL-Wawi 4
MS SQL von JTL an N8N anbinden JTL-Wawi 1.9 16
Neu Suche Kenner der MS SQL Datenbanken und JTL-WaWi vorzugsweise Raum Aachen Dienstleistung, Jobs und Ähnliches 1
Mehrere SQL Server JTL-Wawi 1.9 6
Neu Shop Komplettabgleich nicht möglich, Globale Daten verstopft SQL Tabelle tGlobalsQueue komplett JTL-Wawi - Fehler und Bugs 0
Neu Was passiert wenn ich Amazon Aufträge, Lieferscheine und Rechnungen per SQL aus der WAWI-Datenbank lösche? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Installation MS SQL 2022 Express: Fehler beim Warten auf das Wiederherstellungshandle des Datenbankmoduls Installation von JTL-Wawi 9
Neu Biete: Windows Server optimiert für JTL und MS SQL Standard Lizenz (8 Monate alt, 42% unter Neupreis) Dienstleistung, Jobs und Ähnliches 1
Neu Keine erneute Consent-Abfrage nachdem Plugin hinzugefügt wurde Plugins für JTL-Shop 2
Neu Datenbank Abfrage/Update Kundengruppe Checkbox bei Sonderpreisen JTL Ameise - Eigene Exporte 1
In Diskussion Workflow für die Abfrage des noch offenen Kreditlimits JTL-Workflows - Ideen, Lob und Kritik 2
Beantwortet Abfrage liefert nur Ergebnis bei exakt einem Result Eigene Übersichten in der JTL-Wawi 1

Ähnliche Themen