#853 closed Aufgabe (fixed)
Lösung für externe Wawi-Schnittstellen benötigt
| Reported by: | Torsten Riemer | Owned by: | Gerhard Waldemair |
|---|---|---|---|
| Priority: | hoch | Milestone: | modified-shop-2.0.1.0 |
| Component: | Module | Version: | 2.0.0.0 |
| Keywords: | Cc: | ||
| Blocked By: | Blocking: |
Description
Diverse Wawis übertragen das Passwort an die entsprechende Schnittstelle md5-verschlüsselt:
- CAO-Faktura
- Amicron
Über die neue Passwort-Verschlüsselung ist es nicht mehr möglich das md5-Passwort gegen den Hash aus der Tabelle "customers" -> "customers_password" zu validieren.
Mögliche Lösungen:
1.) Umbenennung der Spalte "customers_password" in "customers_password_sha1" und Wiederherstellung der alten Passwort-Spalte als "customers_password" mit md5-Passwort zur Benutzung für Wawi-Schnittstellen.
2.) Erstellung eines System-Moduls mit dem die Wawi-Zugangsdaten in eine eigene Tabelle (beispielsweise "wawi_credentials") geschrieben werden können mit folgenden Spalten:
- id
- wawi_name
- customers_id
- customers_email_address
- customers_password
- customers_status
Attachments (0)
Change History (22)
follow-up: 7 comment:1 by , 10 years ago
comment:2 by , 10 years ago
Ich habe ja auch schon Sonderlösungen beispielsweise für Amicron gebastelt und daher wäre mir Option 1 ehrlich gesagt die liebste.
comment:3 by , 10 years ago
das ist Ansichtssache, ich wäre gegen die 1 Option und wenn dann für die 2te
comment:4 by , 10 years ago
| Priority: | normal → hoch |
|---|---|
| Type: | Erweiterung → Aufgabe |
Ich hatte das vor ein paar Tagen bei Ergofakt.
Einfachste Lösung auf die Schnelle:
Den Passwort MD5 Hash ich die Datei schreiben und statt der xtc_valid_passwort die beiden Hash Werte vergleichen.
Das ist aber keine echte Lösung.
comment:5 by , 10 years ago
Hallo,
besten Dank für Eure Hilfe!
Habe die von h-h-h vorgeschlagene Änderung im CAO-Faktura ausprobiert. Leider erhalte ich noch immer die selbe Fehlermeldung "XML Fehler: Ein XML-Dokument muss ein Element der obersten Ebene enthalten.".
Weiterhin funktionierte vor der Änderung zumindest der Aufruf über den Browser (IE 11 oder Firefox 45.02) jetzt erhalte ich "nur" eine weisse Seite.
Ciao
Manfred
comment:6 by , 10 years ago
Nachtrag: Meldung aus dem Error-Log: "user not found: /export/cao_xtc.php"
comment:7 by , 10 years ago
Ich denke dann hast du den folgenden Teil nicht berücksichtigt.
Replying to h-h-h:
[...]
- Datei export/cao_xtc.php anpassen
suche: (Zeile 194)
xtc_db_query('UPDATE admin_access SET xml_export= 1 WHERE customers_id=\'1\';');
Hier die customers_id = 1 mit der CustomersID des neuen Wawi-Accounts ersetzen.
[...]
comment:8 by , 10 years ago
Danke h-h-h für den Hinweis. Ich bin der Meinung, dass es richtig ist :)
Ausschnitte aus "meiner" cao-xtc.php:
if (column_exists ('admin_access','xml_export')==false) {
xtc_db_query('ALTER TABLE admin_access ADD xml_export INT(1) DEFAULT "0";');
xtc_db_query('UPDATE admin_access SET xml_export= 1 WHERE customers_id=\'2\';');
}
if (!xtc_validate_password($password, $check_customer['customers_password'])) {
if (!$debug_login) exit;
SendXMLHeader ();
print_xml_status (108, $_POST['action'], 'WRONG PASSWORD', '', '', '');
exit;
}
Aber vielleicht bin ich ja auch "Betriebsblind". Das möchte ich nicht ausschließen. :)
Bei mir hat der, für den Versuch angelegte Kunde, die customers-id 2
comment:9 by , 10 years ago
Das Problem ist, dass die Funktion "xtc_validate_password" das Passwort als Klartext haben möchte. CAO-Faktura übermittelt das aber bereits als md5.
Suche:
if (!xtc_validate_password($password, $check_customer['customers_password'])) {
und ersetze mit:
if (!( ($check_customer['customers_password'] == $password) or
($check_customer['customers_password'] == md5($password)) or
($check_customer['customers_password'] == md5(substr($password,2,40)))
))
{
comment:10 by , 10 years ago
Vielen Dank Tomcraft für Deinen Einsatz!
Es ist mir ja schon fast peinlich, aber bei mir tut's mit der letzten Änderung auch noch nicht.
CAO-Faktura mag das Passwort ja bereits als MD5 übermitteln, jedoch glaube ich nicht, dass das (mein) Hauptproblem damit zusammenhängt.
Denn beim Aufruf im Browser mit "http://www.meinedomain.de/export/cao_xtc.php?user=caoadmin@meinedomain.de&password=meinpasswort" erhalte ich nach wie vor eine leere Seite…
…leider ohne Meldung in der error.log
In CAO-Faktura habe ich dann "natürlich" auch noch den Fehler.
Ciao
Manfred
comment:11 by , 10 years ago
Das hattest du auch ausgeführt?
UPDATE customers SET customers_password = MD5('meinpasswort') WHERE customers_id = 2;
Ich hatte es eben gerade getestet und bei mir funktionierte es einwandfrei.
comment:12 by , 10 years ago
Ich hatte ja schon früher mit solchen Problemen aufgrund der neuen Verschlüsselung experimentiert. Meine Lösung sieht so aus:
Neues Feld für ein MD5-Passwort. Dies ist unabhängig vom Userpasswort und im Konto des Users zu setzen. Dieses Passwort ist nun der Public-Key mit dem Daten SHA-verschlüsselt übertragen werden können; u. a. auch das Passwort zur Validierung des Users.
Ich habe dafür eine Crypt-Klasse. Diese sieht genau so aus, damit man auf Seiten der Wawi oder was auch immer neben PHP auch .NET nutzen kann. Wenn ich das richtig sehe, sollte das auch unter PHP7 funktionieren.
/* New user.specific Encryption
*
* webald
* 2014-11-24
*
*/
// require_once (DIR_WS_INCLUDES.'database_tables.php');
// include_once (DIR_WS_API_DB_CLASSES.'database.class.php');
class TripleDES {
private $bPassword;
private $bIV;
public function __construct($Password) {
$this->bPassword = md5(utf8_encode($Password),TRUE);
$this->bPassword .= substr($this->bPassword,0,8);
$this->bIV = substr(md5(utf8_encode(substr($Password,-8)),TRUE),0,8);
}
public function EncryptECB($message) {
$size=mcrypt_get_block_size('tripledes','ecb');
$padding=$size-((strlen($message)) % $size);
$message .= str_repeat(chr($padding),$padding);
$encrypt = mcrypt_encrypt('tripledes',$this->bPassword,$message,'ecb');
return base64_encode($encrypt);
}
public function DecryptECB($message) {
return mcrypt_decrypt('tripledes', $this->bPassword, base64_decode($message), 'ecb');
}
public function EncryptCBC($message) {
//$size=mcrypt_get_block_size('tripledes','cbc');
//$padding=$size-((strlen($message)) % $size);
//$message .= str_repeat(chr($padding),$padding);
//echo 'EncryptCBC';
$encrypt = mcrypt_encrypt('tripledes',$this->bPassword,$message,'cbc', $this->bIV);
// $encrypt = rtrim($encrypt);
// $encrypt = str_replace("",'',$encrypt);
return base64_encode($encrypt);
}
public function DecryptCBC($message) {
try{
$decoded = mcrypt_decrypt('tripledes', $this->bPassword, base64_decode($message), 'cbc', $this->bIV);
} catch (Exception $e) {
echo 'Exception abgefangen: ', $e->getMessage(), "\n";
}
$decoded = rtrim($decoded);
return $decoded;
}
}
Es lassen sich so alle Daten verschlüsselt übertragen. Der Public-Key (MD5-Passwort) wird nur im Shop einmalig gesetzt. Auf Clientseite wird aus dem bekannten Passwort ebenfalls der MD5-Hash generiert und zur De-/Verschlüsselung genutzt, aber nie übertragen.
comment:14 by , 9 years ago
| Resolution: | fixed |
|---|---|
| Status: | closed → reopened |
comment:16 by , 9 years ago
| Resolution: | fixed |
|---|---|
| Status: | closed → reopened |
comment:17 by , 9 years ago
| Milestone: | modified-shop-2.0.1.0 → modified-shop-2.0.1.1 |
|---|
comment:18 by , 9 years ago
| Milestone: | modified-shop-2.0.2.0 → modified-shop-2.0.2.1 |
|---|
comment:19 by , 9 years ago
| Milestone: | modified-shop-2.0.2.1 → modified-shop-2.1.0.0 |
|---|
comment:20 by , 8 years ago
| Milestone: | modified-shop-2.1.0.0 |
|---|
comment:21 by , 7 years ago
| Resolution: | → fixed |
|---|---|
| Status: | reopened → closed |
nach Vorlage vom CAO System Modul kann kann die Authentifizierung für andere Wawis problemlos umgesetzt werden. Zusätzlicher Vorteil davon, man muss keinen Admin Account angeben, sondern vergibt User und Passwort.
comment:22 by , 7 years ago
| Milestone: | → modified-shop-2.0.1.0 |
|---|

Anleitung (ungetestet):
suche: (Zeile 194)
xtc_db_query('UPDATE admin_access SET xml_export= 1 WHERE customers_id=\'1\';');Hier die customers_id = 1 mit der CustomersID des neuen Wawi-Accounts ersetzen.
suche: (Zeile 228)
if (!xtc_validate_password($password, $check_customer['customers_password'], $check_customer['customers_id'])) {ersetze mit:
if (!xtc_validate_password($password, $check_customer['customers_password'])) {Und dann in der Datenbank folgenden Befehl ausführen:
UPDATE customers SET customers_password = MD5('X') WHERE customers_id = Y;X mit dem Passwort f. die Wawi ersetzen und Y mit der CustomersID des Wawi-Accounts
Da xtc_validate_passwort ohne CustomersID nur das Passwort prüft ohne es zu aktualisieren, kann das MD5 weiter für den Wawi-Account verwendet werden, solange sich keiner mit diesem in den Shop normal einloggt.