Neu SQL Abfrage - Kundendaten entschlüsseln cNachname & cStrasse

wunderli

Aktives Mitglied
21. September 2015
17
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.243
1.968
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
17
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.243
1.968
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
17
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.243
1.968
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 VK Preise pro Kundengruppe für Grafana JTL-Wawi 1.8 9
Neu List & Label - Eigene SQL-Abfrage als Grundlage für Tabelle im Berichtscontainer? User helfen Usern - Fragen zu JTL-Wawi 10
Neu Innerhalb einer Variable -SQL Abfrage- das Wort "fett" schreiben Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu SQL Abfrage, 3. Mahnstufe User helfen Usern - Fragen zu JTL-Wawi 1
Beantwortet Hilfe bei SQL Abfrage erbeten User helfen Usern - Fragen zu JTL-Wawi 3
Neu SQL Abfrage - Sendungsnummern als Liste nach Datum Schnittstellen Import / Export 2
Neu Update für Shopvote 1.1.0 führt zu SQL-Fehler Plugins für JTL-Shop 4
Neu SQL: Positionen eines Auftrags sind auf welchem Lieferschein gelandet? Eigene Übersichten in der JTL-Wawi 7
Neu Backup einrichten, habe die SQL Anmeldedaten verlegt Installation von JTL-Wawi 1
Neu SQL Query zum Bilder löschen Arbeitsabläufe in JTL-Wawi 3
Neu SQL Server kein Mandant auswählbar und Dienst lässt sich nicht starten Installation von JTL-Wawi 2
Neu Ameise-Vorlage per SQL abrufen und Daten als Ergebnis erhalten JTL Ameise - Eigene Exporte 1
Neu SQL DB läuft mit Fehler voll und crasht Server JTL-Shop - Fehler und Bugs 1
Neu SQL Vartable für Reservierte Artikel gesucht User helfen Usern - Fragen zu JTL-Wawi 2
Neu SQL Eigener Export - Eigene Felder im Auftrag User helfen Usern - Fragen zu JTL-Wawi 7
Neu Wie finde ich per SQL heraus welche Aufträge auf Teillieferbar stehen? JTL Ameise - Eigene Exporte 1
Neu Microsoft SQL unter MS365 Installation von JTL-Wawi 2
Neu Variable oder SQL zum Feld "Gewinn netto" (im Auftrag) Eigene Übersichten in der JTL-Wawi 9
Neu SQL Code zur Ausgabe des Verkaufspreis je Kundengruppe User helfen Usern 1
Neu MS SQL Server auf Windows vs Linux Starten mit JTL: Projektabwicklung & Migration 9
Neu DB: kPlattform eines Auftrages ändern (SQL) - Zwecks Lagerplatzreservierung User helfen Usern - Fragen zu JTL-Wawi 0
In Diskussion Abfrage auf Wert bei allen Artikelpositionen nicht möglich? Gelöste Themen in diesem Bereich 12

Ähnliche Themen