• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

XML Sicherheit

T

toney

Guest
Guten Morgen,

ich entwickle im Moment eine kleine Seite mit Userprofilen etc. Zur Speicherung der Userdaten nutze ich XML-Files als Datenbank, auf die ich mit PHP zugreife. Und damit man sich da auch einloggen kann braucht man natürlich ein Passwort. Meine Frage ist nun: Wenn ich das Passwort in einer XML speichere (als Klartext), wie sicher ist das? Kann man da als fremder mit irgendwelchen Tricks drauf zugreifen? Wenn ja, wie kann ich es zB verschlüsseln oder wie kann ich es sicherer machen?

Schonmal vielen Dank für eure Hilfe.

Gruß,
toney.
 
Werbung:
Hallo toney,

Passwörter sollten niemals in Klartext gespeichert werden. Verschlüsselungsmethoden sind z.B. md5(), sha1(), hash(), etc.

Gruß
 
Hallo vitus,

vielen Dank erstmal für deine Antwort.

Hm ja, sowas hab ich schon erwartet.
Wenn ich das Passwort verschlüsselt in der XML speichere, wie schwer/leicht ist es dann noch für Fremde, das ganze herauszufinden? Reicht das eventuell schon an Sicherheit? Muss ja jetzt keine Hochsicherheitsseite sein, aber ganz so einfach solls auch nich sein...

Gruß
 
Werbung:
Evtl. ist es noch sinnvoll, die XML-Dateien in einem per .htaccess verschlüsselten Ordner abzulegen, damit nicht jeder direkt auf sie zugreifen kann.
 
Alles klar, dann werd ich mich mal da ran machen. Vielen Dank euch beiden ;)

Gruß
toney
 
Werbung:
Sicherheit ist ein komplexes Thema. Kleines Beispiel: Mein Passwort lautet „apfel“. Wenn ich das mit MD5 hashe, bekomme ich als Hash „f9961ecb53c5204496032f79774ee057“.

Sieht auf den ersten Blick sicher aus, nur ist MD5 ein so verbreitetes Verfahren, dass riesige Datenbanken (Rainbow Table) existieren, die einen Hash in den „Originalwert zurückrechnen“.

Demo:

[noparse]http://md5.gromweb.com/?md5=f9961ecb53c5204496032f79774ee057[/noparse]

- Rainbow Table

Das ist gerade bei kurzen, „lesbaren“ Passwörtern ein Problem.

Abhilfe schafft es, das Passwort künstlich zu verlängern.

- Salt (Kryptologie)

Ich schicke nicht „apfel“ sondern „schwuppdiwupp“ + „apfel“ durch die Hash-Funktion. Die Rainbow-Table-Datenbank müsste nun einen Eintrag für „schwuppdiwuppapfel“ enthalten, was aufgrund der Länge dieses Strings unwahrscheinlich ist.

Ein Angreifer, der diesen „schwuppdiwupp“-String kennt, kann jetzt aber hergehen und sich eine eigene Rainbow Table erstellen, die nicht die eigentlichen Wörter enthält, sondern jeweils „schwuppdiwupp“ + $eigentlichesWort.

Das dauert zwar eine Weile, ist aber bei einem Verfahren wie MD5 technisch auch auf einem normalen Heim-PC problemlos machbar. Wir reden hier eher von Stunden/Tagen als von Wochen.

Der nächste Ansatz ist es, einen dynamischen Salt zu verwenden, also für den einen Nutzer „schwuppdiwupp“, für den nächsten „bibabubbobbeb“. Ein Angreifer müsste dann für jeden Nutzer eine eigene Rainbow Table erstellen, was dann nicht einmal Stunden/Tage dauert, sondern für jeden Nutzer diese Zeit.

Das ist es, was gemeinhin genutzt wird. Zusätzlich zu Nutzername legst du für jeden Nutzer ein Feld „Salt“ an und speicherst das Passwort als Hash von $salt + $passwort. Beim Login würdest du dann nachsehen, ob der Nutzername in deiner Datenbank/XML-Datei existiert, den entsprechenden Hash aus $salt + $eingegebenesPasswort bilden und überprüfen, ob dieser String identisch mit dem ist, was für den Nutzer als $passwortHash hinterlegt ist.

Zusätzlich dazu gibt es noch den Ansatz, die Hash-Funktion nicht einmal, sondern 100- oder 1000-mal auf die Eingabe anzuwenden. Die Idee dahinter ist wiederum, dass das Generieren einer Rainbow Table in die Länge gezogen wird.
 
Hallöle mermshaus,

das klingt mal nach ner ziemlich guten Idee. Das klingt tatsächlich mal so, als wäre es relativ sicher...
Vielen Dank!
 
So ich muss nochmal das Thema aufgreifen. Ich bin nun endlich dazu gekommen, das ganze so umzusetzen und nun noch eine kleine Frage:
wenn ich einfach ein Passwort baue das z.B. aus "time()-passwort-username" besteht und mit md5 verschlüssle - dann sollte das schon ziemlich sicher sein, oder?

Danke schonmal :)
 
Werbung:
aber time() ändert sich doch bei jedem aufruf.. der user wird sich niemals einloggen können, oder wie soll man das verstehen?
Wieso nutzt du denn eigentlich keine Datenbank?
 
Nein, es wird bei der Registrierung die time() gespeichert und die wird dann mit verschlüsselt.
 
Zurück
Oben