jOpenSimWorld

Grid Status: Online
Total Regions: 23
Visitors (30 Days): 10
Total Residents: 485
Online Now: 0
Hypergriders online: 0

frage zum opensim hash

12 years 4 months ago #1224 by basecolor
hallo zusammen
ich hab mal eine frage.
wie setzt sich der passwordhash und passwordsalt von opensim in der auth tabelle eigendlich zusammen?
ich bekomm den einfach nicht ausgelesen
mit md5(md5('password') + : etc geht es nicht dann stimmt der wert nicht ueberein. wollte mir was zusammen basteln und dazu die kennwörter der auth verwenden hoffe weiss einer rat:( danke schonma im vorraus

Please Log in or Create an account to join the conversation.

12 years 4 months ago #1225 by foto50
Hallo basecolor

Zu allererst: auslesen geht überhaupt nicht! Das liegt am Grundsatz der MD5-Verschlüsselung, bei der während des Verschlüsselungsprozesses etwas verloren geht. D.h. diese Verschlüsselung ist irreversibel - nicht rückwärts machbar. Ein Passwort auf die Gültigkeit zu prüfen kann man nur, indem man den eingegebenen Wert für das Passwort ebenfalls verschlüsselt und mit dem gespeicherten, verschlüsselten Wert vergleicht.

Die Hash/Salt Methode geht da noch einen Schritt weiter: Dabei ist der (meist zufällig generierte) Salt-Wert selbst dem Ersteller des Passwortes nicht bekannt. Zur Prüfung muss dann md5(md5(eingegebenes Passwort)+":"+Salt) herangezogen werden. Der Nachteil neben der Notwengikeit, 2 Felder (Hash + Salt) statt nur einem (Passwort) speichern zu müssen ist wohl auch ein ungleich höherer Aufwand bei der Prüfung. Der Vorteil allerdings ist ein ungleich höherer Schutz für die gespeicherten Passwörter für die User.

Wenn ich in einer Datenbanktabelle in einem Passwortfeld z.B. den Wert "098f6bcd4621d373cade4e832627b4f6" oder "81dc9bdb52d04dc20036dbd8313ed055" sehe, weis ich sofort, dass das Passwort "test" bzw. "1234" ist. Bei der Hash/Salt Methode ist das aber nicht so ohne weiteres ersichtlich, da der gespeicherte Wert (der Hash) für das selbe Passwort jedesmal ein anderer ist.

Ich hoffe, das hilft dir ein bisserl weiter.

Greetz
FoTo50

Please Log in or Create an account to join the conversation.

12 years 4 months ago #1227 by TimSolano
Hallo.

Ich bin ebenfalls an diesem Thema interessiert. Leider bin ich nun kein Fachmann au Sachen PHP. Derzeit habe ich mein Login so gemacht:

$user = md5($user);
$user = md5(md5($user).":".$user);

Das Problem ist dabei, das mein Passwort-Hash nicht mit dem in der Datenbank übereinstimmt. Könnte mir da bitte jemand helfen, wie ich mein Login realisieren könnte?

Gruß Tim

Please Log in or Create an account to join the conversation.

12 years 4 months ago #1228 by foto50
Hallo TimSolano

Das ist im Prinzip schon so richtig ... das wird in jOpenSim genauso berechnet. Die Login-Prozedur wird allerdings nicht von uns realisiert, sondern ist von OpenSim festgelegt. Wenn es (so wie bei jOpenSim) lediglich darum geht, das Passwort zu speichern bzw. zu überschreiben, dann müssen nur noch diese BEIDEN Werte ($user und $user) in der Tabelle "auth" in die gleichnamigen Felder geschrieben werden.

Greetz
FoTo50

PS.: da das eindeutig ein DEV-Talk ist, habe ich es in dieses Forum verschoben ;)

Please Log in or Create an account to join the conversation.

12 years 4 months ago #1229 by foto50
Nachtrag:

Was bei 'passwordSalt' verwendet wird hat mit dem Passwort selber nicht wirklich etwas zu tun. Um etwa noch mehr Zufälligkeit zu erreichen, könnte man genauso
$user['passwordSalt'] = md5(time()); // oder auch ... md5("blabla".microtime()."undsoweiter")
$user['passwordHash'] = md5(md5($user['password']).":".$user['passwordSalt']);
schreiben.

Wichtig ist einfach, dass danach auch beide Werte in der Tabelle 'auth' stehen...

Greetz
FoTo50

Please Log in or Create an account to join the conversation.

12 years 4 months ago #1230 by TimSolano
Hmmm aber wie überprüfe ich nun, ob das eingebene Passwort aus meinem Login Formular dasselbe ist wie das in der "auth" Tabelle vom OpenSim?

Könntest du mir da vllt. nen kleinen Codeschnipsel geben?

Gruß Tim

Please Log in or Create an account to join the conversation.

12 years 4 months ago #1231 by foto50
Hallo Tim

Dazu muss lediglich ein Query mit einer passenden SELECT-Abfrage gebastelt werden.

Z.B.:
SELECT
	auth.*
FROM
	auth
WHERE
	auth.passwordHash = MD5(CONCAT(MD5('$eingegebenesPasswort'),':',auth.passwordSalt));
bzw. wenn du auch noch Daten aus der Tabelle UserAccounts brauchst z.B.
SELECT
	UserAccounts.FirstName,
	UserAccounts.LastName,
	auth.*
FROM
	auth,
	UserAccounts
WHERE
	auth.passwordHash = MD5(CONCAT(MD5('$eingegebenesPasswort'),':',auth.passwordSalt))
AND
	auth.UUID = UserAccounts.PrincipalID;
wobei $eingegebenesPasswort das aus deinem Formular sein muss.

Wenn da eine einzige Zeile herauskommt, war der Login gültig, ansonsten nicht.

Greetz
FoTo50
The following user(s) said Thank You: TimSolano

Please Log in or Create an account to join the conversation.

12 years 4 months ago #1232 by TimSolano
Du meinst also so:
$password = htmlspecialchars($_POST["password"]);
//Passwort überprüfen
$abfrage = "SELECT * FROM auth WHERE passwordHash = MD5(CONCAT(MD5('$password'),':',passwordSalt))";
$ergebnis = mysql_query($abfrage,$verbindung_opensim);
$row = mysql_fetch_object($ergebnis);

Aber wie mache ich dann die If Abfrage ob das Passwort richtig ist?

Gruß Tim

Please Log in or Create an account to join the conversation.

12 years 4 months ago #1233 by foto50
Guten Morgen Tim ;)

Zuerst: ich würde nicht htmlspecialchars() verwenden. Passwörter die z.B. ein "&", "<" oder ein ">" beinhalten werden damit falsch umgewandelt. Eine recht zuverlässige Absicherung gegen SQL-Injections wäre z.B.
$passwort = mysql_real_escape_string(stripslashes($_POST["password"]));
Ob das Passwort richtig ist, kannst du daran erkennen, ob überhaupt ein Ergebnis retour kommt. Also z.B.:
...
$ergebnis = mysql_query($abfrage,$verbindung_opensim);
$zeilen = mysql_num_rows($ergebnis);
if($zeilen == 1) {
	// wenn eine einzige Zeile retour kommt war das gültig
} else {
	// das war ungültig (0 oder eher unwahrscheinliche mehrere Zeilen)
}
Greetz
FoTo50
The following user(s) said Thank You: TimSolano

Please Log in or Create an account to join the conversation.

12 years 4 months ago #1234 by TimSolano
Danke. Nun funzt alles :)

Please Log in or Create an account to join the conversation.

Time to create page: 0.134 seconds

Search

Donate jOpenSim

Please consider supporting our efforts.

Amount

Our Regions

Region: Loc X: Loc Y:
Agora 1000 998
BareBad… 997 997
Bohemas 996 998
BoraBor… 1002 999
Crystal… 1001 1000
DeepTho… 1005 998
FoToSan… 999 995
jCity 1001 997
jOpenWe… 1000 999
JuniorT… 1002 1001
Kanadah… 1002 1000
LindaKe… 1000 997
LittleC… 996 997
MonteSc… 1001 1001
Naos 999 999
Pangaea 1005 1003
RiverSi… 999 1000
Sakani 999 998
Snambin 1001 998
Tartola 997 998
ViewerH… 1002 998
WaterWo… 1001 999
WilderK… 1000 1000

jOpenSimWorld

Grid Status: Online
Total Regions: 23
Visitors (30 Days): 10
Total Residents: 485
Online Now: 0
Hypergriders online: 0