Benutzer-Werkzeuge

Webseiten-Werkzeuge


webedition:administration:changecustomerpasswd

Konvertieren von Kundenpasswörter

2 Antworten

Seit Version 6.3.9 steht auch in webEdition eine systemseitige Funktion zur Verschlüsselung der Kundenpasswörter zur Verfügung. Es wird hierbei zwischen 2 möglichen Verschlüsselungssystemen unterschieden:

  • symmetrische Verschlüsselung
  • Hashing

Die Einstellung kann wie gewohnt in den Systemeinstellungen unter dem Reiter Sicherheit gemacht werden.

Das empfohlene Verschlüsselungsverfahren ist Hashing, bei dem das Passwort nicht zurückberechnet werden kann. Um das Hashingverfahren nutzen zu können, wird von webEdtion mindestens PHP 5.3.8 benötigt! Ist diese Voraussetzung nicht erfüllt steht das Verfahren „Hash-Funktion“ nicht zur Verfügung (und kann in der Liste nicht ausgewählt werden). Wird jedoch das symmetrische Verschlüsselungsverfahren gewählt, wird hierzu der darunter aufgeführte Schlüssel verwendet. Da der Schlüssel individuell pro Installation generiert wird, ist eine Änderung nicht notwendig. Zusätzlich zu dem Backup sollten Sie diesen Schlüssel noch an einer anderen Stelle speichern (Text-Datei), da ohne diesen Schlüssel alle Passwörter nicht mehr zu entschlüsseln oder zu vergleichen sind.

Wie werden nun Passwörter verschlüsselt?

Trotz der geänderten Einstellung werden nicht gleich alle Passwörter direkt verschlüsselt, Tags die Passwörter in die DB schreiben, verwenden jedoch sofort die neue Einstellung. Vor der Konvertierung der Passwörter sollten Sie sicherheitshalber erst noch ein Backup anlegen. Da ausschließlich die Kundentabelle betroffen ist, reicht es diese zu sichern oder im Fehlerfall nur diese Wiederherzustellen.

Für die Verschlüsselungen bei bestehenden Installationen sollte dazu das folgende Script in eine Vorlage kopiert werden und davon ein dynamsiches Dokument erstellt werden:

<we:ifNotWebEdition><html><head></head><body>
		<we:ifNotVar name="doConvert" type="request" match="1">
			<?php
//check support
			$do = false;
			switch(SECURITY_ENCRYPTION_TYPE_PASSWORD){
				case we_customer_customer::ENCRYPT_NONE:
					echo '<h1>Passwortverschlüsselung deaktiviert!</h1>';
				case we_customer_customer::ENCRYPT_SYMMETRIC:
					echo '<h1>Passwortverschlüsselung auf symmetrisch geschaltet</h1><b>Das Passwort läßt sich mit Kenntnis des Schlüssels zurückrechnen!</b>';
					$do = true;
				case we_customer_customer::ENCRYPT_HASH:
					if(version_compare(PHP_VERSION, '5.3.7') >= 0){
						echo '<h1>Passwortverschlüsselung auf Hashing geschaltet!</h1><b>Diese Funktion ist NICHT umkehrbar!<br/>Legen Sie zur Sicherheit vorher ein Backup der Kundendaten an!</b>';
						$do = true;
					} else {
						echo '<h1>Kein Update auf Hashed-Passwörter möglich!</h1><b>Ihre PHP-Version läßt kein korrektes Hashing zu<br/>mindestens PHP 5.3.7 benötigt!</b>';
					}
			}
			?>
			<we:ifVar name="do" type="global" match="1">
				<?php
				$cnt = f('SELECT COUNT(1) FROM ' . CUSTOMER_TABLE . ' WHERE Password!="" AND Password NOT REGEXP "\\$.{1,3}\\$"');
				echo '<p><b>' . $cnt . ' zu konvertierende (unverschlüsselte) Datensätze</b></p>';
				if($cnt){
					?>
					<we:form id="self" method="get">
						<input type="hidden" name="doConvert" value="1"/>
						<input type="submit" value="Konvertierung starten" />
					</we:form><?php }
				?>
 
			</we:ifVar>
			<we:else/><?php
			$db = new DB_WE();
			$max = 20;
			$db->query('SELECT ID,Password FROM ' . CUSTOMER_TABLE . ' WHERE Password!="" AND Password NOT REGEXP "\\\$.{1,3}\\\$" ORDER BY ID LIMIT ' . $max);
			echo 'Update der Passwörter (' . date('H:i:s') . ')....<br/>IDS:<br/>';
			$max-=$db->num_rows();
			while($db->next_record()){
				$newPwd = we_customer_customer::cryptPassword($db->f('Password'));
				echo $db->f('ID') . '</br>';
				$GLOBALS['DB_WE']->query('UPDATE ' . CUSTOMER_TABLE . ' SET Password="' . $db->escape($newPwd) . '" WHERE ID=' . $db->f('ID'));
			}
 
			echo ($max <= 0 ?
				we_html_element::jsElement('location.reload();') :
				'<h1>Konvertierung beendet</h1>');
			?>
		</we:ifNotVar>
		<?php ?></body></html>
</we:ifNotWebEdition>

Wird das dynamische Dokument aufgerufen, wird zunächst eine Prüfung durchgeführt und die Zielverschlüsselung angezeigt. Nach Bestätigen des Dialogs wird die Konvertierung angestoßen und die Seite nach 20 Kunden neu geladen, bis die Konvertierung beendet ist. Während der Konvertierung können Kunden ganz normal die Seite benutzen. Es kann nur vorkommen, daß es bei sehr hoher Systemlast die zusätzliche Konvertierung zu Verzögerungen bei der Seitenauslieferung kommt.

Können Kunden mit verschlüsseltem Passwort auf eine andere Installation übertragen werden?

Sofern Sie die Hash-Funktion verwendet haben, können die Kunden auch auf einer anderen Installation eingespielt werden. Das verschlüsselte Passwort ist dann genauso auf der neuen Installation gültig.

Wurde die Crypt-Funktion verwendet, kann das Passwort auf der zweiten Installation nur dann verwendet werden, wenn der symmetrische Schlüssel auf beiden Installationen gleich ist.

webedition/administration/changecustomerpasswd.txt · Zuletzt geändert: 2015/12/22 17:35 von Marc Krämer

Recent changes RSS feed