Opened 5 years ago

Closed 2 years ago

Last modified 2 years ago

#853 closed Aufgabe (fixed)

Lösung für externe Wawi-Schnittstellen benötigt

Reported by: Tomcraft Owned by: GTB
Priority: hoch Milestone: modified-shop-2.0.1.0
Component: Module Version: 2.0.0.0

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)

comment:1 follow-up: Changed 5 years ago by h-h-h

Anleitung (ungetestet):

  • Neuen Admin-Account anlegen f. Wawi-Zugriff
  • Keine Rechte im Admin vergeben
  • 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.

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.

comment:2 Changed 5 years ago by Tomcraft

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 Changed 5 years ago by h-h-h

das ist Ansichtssache, ich wäre gegen die 1 Option und wenn dann für die 2te

comment:4 Changed 5 years ago by web28

  • Priority changed from normal to hoch
  • Type changed from Erweiterung to 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 Changed 5 years ago by mannez

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 Changed 5 years ago by mannez

Nachtrag: Meldung aus dem Error-Log: "user not found: /export/cao_xtc.php"

comment:7 in reply to: ↑ 1 Changed 5 years ago by Tomcraft

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 Changed 5 years ago by mannez

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 Changed 5 years ago by Tomcraft

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 Changed 5 years ago by mannez

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 Changed 5 years ago by Tomcraft

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.

Bitte ab jetzt im Forum innerhalb deines Themas ("Shopversion 2.0.0.0 - CAO-Faktura - XML-Fehler") weiter, denn hier erfolgt kein Support, sondern wir suchen nur Lösungen für bekannte Probleme.

Last edited 5 years ago by Tomcraft (previous) (diff)

comment:12 Changed 5 years ago by webald

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:13 Changed 5 years ago by GTB

  • Owner set to GTB
  • Resolution set to fixed
  • Status changed from new to closed

In 10297:

fix #59, partly fix #853 - update cao faktura

comment:14 Changed 5 years ago by Tomcraft

  • Resolution fixed deleted
  • Status changed from closed to reopened

comment:15 Changed 5 years ago by Tomcraft

  • Resolution set to fixed
  • Status changed from reopened to closed

In 10299:

Revised r10297 (fix #59, partly fix #853 - update cao faktura)

comment:16 Changed 5 years ago by Tomcraft

  • Resolution fixed deleted
  • Status changed from closed to reopened

comment:17 Changed 5 years ago by Tomcraft

  • Milestone changed from modified-shop-2.0.1.0 to modified-shop-2.0.1.1

comment:18 Changed 5 years ago by Tomcraft

  • Milestone changed from modified-shop-2.0.2.0 to modified-shop-2.0.2.1

comment:19 Changed 5 years ago by Tomcraft

  • Milestone changed from modified-shop-2.0.2.1 to modified-shop-2.1.0.0

comment:20 Changed 3 years ago by Tomcraft

  • Milestone modified-shop-2.1.0.0 deleted

comment:21 Changed 2 years ago by GTB

  • Resolution set to fixed
  • Status changed from reopened to 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 Changed 2 years ago by Tomcraft

  • Milestone set to modified-shop-2.0.1.0

Add Comment

Modify Ticket

Action
as closed
The resolution will be deleted. Next status will be 'reopened'
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.