Neu SQL Abfrage - Kundendaten entschlüsseln cNachname & cStrasse

wunderli

Aktives Mitglied
21. September 2015
16
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
6.943
1.740
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
16
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
6.943
1.740
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
16
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
6.943
1.740
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
Neu Fehler bei SQL-Abfrage durch Aufgabenplanung Gelöste Themen in diesem Bereich 12
Neu SQL Fehler - Woher stammt diese Abfrage JTL-Shop - Fehler und Bugs 7
Neu SQL Abfrage User helfen Usern - Fragen zu JTL-Wawi 3
Neu Korrektes Datumsformat in SQL-Abfrage User helfen Usern - Fragen zu JTL-Wawi 2
Neu Probleme beim Abfrage kopieren von SQL Management Studio User helfen Usern - Fragen zu JTL-Wawi 1
SQL Abfrage für verkaufte Artikel + aktueller Bestand JTL-Wawi 1.8 1
Neu Bild per SQL Query aus lesen aus von Artikel Bildplattform Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Umlagerungen - Wie, wo, oder SQL? Arbeitsabläufe in JTL-Wawi 2
Neu SQL Server Update von 2014 auf 2019 oder Neuinstallation? Installation von JTL-Wawi 4
Neu SQL: img alt Tags setzen User helfen Usern - Fragen zu JTL-Wawi 2
[Bug] JTL-Wawi 1.9 | Auftrag: Statustext in Workflow Variablen leer | gelöst: [SQL] JTL-Wawi 1.9 0
Auftrag: Eigene Felder in DotLiquid Vorlage verwenden [Wawi 1.9.4.5] [SQL] JTL-Wawi 1.9 0
Neu Partner für JTL Shop WAWI und MS SQL Server gesucht Dienstleistung, Jobs und Ähnliches 2
Neu SQL Server 2022 Standart auf M.2 NVMe SSD Installation von JTL-Wawi 36
Neu Fehlermeldung "Es wurde im SQL-Server kein Backuppfad hinterlegt" => kein Schemaupdate möglich JTL-Wawi - Fehler und Bugs 8
Neu Nach Update auf SQL 2022 Express keine verbindung mehr mit Client möglich Installation von JTL-Wawi 2
Neu Tabelle aus eigenem SQL in Druckvorlage möglich? Gelöste Themen in diesem Bereich 3
Neu Merkmal eindeutig per SQL zuordnen Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Update SQL 2017 Express auf 2022 Standard Installation von JTL-Wawi 7
In Diskussion SQL Update aus Workflow heraus JTL-Workflows - Fehler und Bugs 8
Neu Gewogenes Versandgewicht per SQL exportieren und anschließend in Artikelstammdaten importieren JTL Ameise - Eigene Exporte 0
Neu Gewogenes Versandgewicht per SQL exportieren und anschließend in Artikelstammdaten importieren Gelöste Themen in diesem Bereich 5
Neu Bestandsführung per SQL deaktivieren User helfen Usern - Fragen zu JTL-Wawi 3
Neu Installation von JTL-WaWi auf SQL DB mit AD Account möglich? Installation von JTL-Wawi 7
Minimale Benutzerrechte SQL User für täglichen operativen Betrieb JTL-Wawi 1.9 10
Neu Plattform Feld per SQL setzen - mehrere Marken unter einer Firma verkaufen User helfen Usern - Fragen zu JTL-Wawi 6
Neu Workflow - SQL - Frage zur DATEADD()-Funktion User helfen Usern - Fragen zu JTL-Wawi 2
Neu Wie kann man Anzahl der VPE per SQL abfragen? User helfen Usern - Fragen zu JTL-Wawi 1
Neu Kundendatenimport via SQL JTL-Wawi 1.6 1
Neu Abfrage per Erweiterter Eigenschaft zu Lieferstatus aller Bestellungen eines Kunden User helfen Usern - Fragen zu JTL-Wawi 0
In Diskussion For Schleife über Abfrage JTL-Workflows - Ideen, Lob und Kritik 8
Beantwortet Abfrage des Verkaufskanals als Bedingung JTL-Workflows - Fehler und Bugs 2
Neu Abfrage des Lieferantenbestands Eigene Übersichten in der JTL-Wawi 4
Neu Migration von Shopware 6, Kundendaten Allgemeine Fragen zu JTL-Shop 4
Kundendaten & Bestellungen & Rechnungen löschen JTL-Wawi 1.6 3
Neu Übernahme Shop inkl. WAWI - Löschen von Kundendaten in der Datenbank Installation von JTL-Wawi 4
Neu Über 10 Jahre alte Kundendaten + Aufträge + Rechnung in der wawi löschen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Kundendaten extern verschlüsseln (Für den eigenen Shop) und per Import importieren Technische Fragen zu Plugins und Templates 2

Ähnliche Themen