Benutzer Daten sicher speichern oder warum MD5 unsicher ist.
21. August 2008In den letzten Tagen gab es viel Trubel um geklaute Benutzerdaten. Heutzutage sind nicht nur Hacker gefährlich, sondern auch die eigenen Mitarbeiter oder extra eingeschleuste Spione. Diese haben oft einen einfachen Zugriff auf die Datenbanken und können einen Dump der Datenbank machen und die dann verkaufen.
Deshalb sollte der Inhalt der Datenbanken möglichst verschlüsselt sein um die Nutzbarkeit eines solchen Dump zu verhindern.
Passwörter verschlüsseln
Passwörter sollten immer verschlüsselt in der Datenbank abgelegt sein. Leider geschieht das oft nur mit einer einfachen md5 Verschlüsselung.
<?php
$hash = md5($password);
?>
Für md5 gibt es unzählige Tools um diese wieder in Klartext umzuwandeln (Google: md5 reverse). Auch andere Verschlüsselungs Systeme helfen da nicht, wenn man das Verschlüsseln nicht komplizierter macht.
Zusätzlich zu dem Passwort sollte man noch den Login Namen in den Verschlüsselungs Mechanismus einbauen. Aber auch dass lässt sich mit ein wenig krimineller Energie schnell knacken.
<?php
$hash = md5($password.$login);
?>
Wenn man noch einen Anwendung spezifischen Schlüssel einbaut wird es sehr schwer das Passwort den Benutzers zu ermitteln.
<?php
$salt = 'jfhfg&%55707865gGFds93kjl3ß()(73äü';
$hash = md5($salt.$password.$salt.$login.$salt);
?>
Kreditkarten- und Bankdaten
Kreditkartendaten sind das sensibelste eines Online Shops. Diese Daten sollte man nur speichern wenn man sicherstellen kann dass diese nicht geklaut werden können. Da jeder Benutzer weiß, dass Kreditkartendaten gerne geklaut werden, ist er auch nicht verärgert wenn er seine Daten immer wieder erneut eingeben muss.
Um die Daten dennoch sicher zu speichern gehe ich wie folgt vor:
Ich verschlüssele alle Daten mit einer Verschlüsselung die einen eindeutigen Schlüssel benötigt und wieder entschlüsselbar ist. Zu Beispiel Blowfish.
Wichtig: Der Schlüssel zum Ver- und Entschlüsseln ist dabei nicht in der Anwendung hinterlegt. Den Schlüssel erzeuge ich bei dem Login den Benutzers anhand seiner Login Daten un speichere diesen dann in der Session.
<?php
$saltkredit = 'jfhfg&%dd55707865gGFds93kjl3ßddd()(73äü';
$hashkredit = md5($salt.$password.$salt.$login);
$_SESSION['KREDITKARTEN_HASH'] = $hashkredit;
?>
<?php
$kreditkartendaten_sicher = crypt($str, CRYPT_BLOWFISH);
$bf = & Crypt_Blowfish::factory('cbc');
$iv = 'd55707865gGFd';
$key = $_SESSIO['KREDITKARTEN_HASH'];
$bf->setKey($key, $iv);
$encrypted = $bf->encrypt('Kreditkartennummer');
?>
Die Kreditkarten- und Bankdaten können somit nur während einer aktuellen Sitzung des Benutzers verwendet werden. Selbst der Shop Besitzer könnte mit den Daten nichts anfangen sofern auch das Passwort richtig verschlüsselt gespeichert worden ist.
Tags: PHP, sicherheit
Der Beitrag wurde am Donnerstag, den 21. August 2008 um 18:00 Uhr veröffentlicht und wurde unter PHP abgelegt. du kannst die Kommentare zu diesen Eintrag durch den RSS 2.0 Feed verfolgen. du kannst einen Kommentar schreiben, oder einen Trackback auf deiner Seite einrichten.