Ich nutze Windows 7 Ultimate x64
Soll ich den MD5 Befehl ausbauen, oder wird das dann unsicher?
Oder ein PHP befehl basteln (das kann ich leider nicht)
was soll ich tun??
[Tutorial] Login + Registrierung über eine MySql-DB [+ Hilfedateien]
-
Jautois -
25. August 2009 um 23:55
-
-
So würde dein Code jetzt mit der php MD5 Version aussehen (es hat sich nicht aufgehangen)
Spoiler anzeigen
[autoit]Code wird auf Wunsch von Yinzao nichtmehr angezeigt. MD5 Befehl steht im Post davor.
[/autoit] -
Danke!!!!
Besser geht es nicht!!! -
Ich hätte mal ne kleine Frage.
Ich hab eine MySQL Datenbank angelegt, jedoch wenn ich den Link zur Datenbankverwaltung phpmyadmin anklicke sagt es mir "Diese Web Seite ist nicht Verfügbar" weiß jemand woran das liegen kann? -
Läuft auch dein Apache?
-
#Update des Tutorials:
+ Datei "db_config.php" enthält nun die MySQL-Datenbankverbindungsdaten und diese müssen somit nicht in jeder php-Datei stehen. Mit "require_once" wird die Datei nun in jede php-Datei, die diese Daten benötigt, eingebunden.
+ Die MD5-Funktion in der Login-Funktion gelöscht und in die php-Datei verlagert -> Code verkürzt
+ [ autoit][ /autoit] - Tags in [ php][ /php] - Tags geändertKomplettes Tutorial habe ich angepasst.
-
Im Notfall könnte man schnell eine Php Seite machen die den MD5 Wert zurückgibt, das ist schnell gemacht.
Das ist unsicher, da die Daten in KLARTEXT an die Webseite gesendet werden.
Besser währe es, wenn der MD5-Hash online generiert werden soll, das Kennwort Client-Seiting zu verschlüsseln und in der PHP-Datei entschlüsseln und dann zu hashen.Komplettes Tutorial habe ich angepasst.
Du weißt, dass du "$HTTP_GET_VARS" verwendest, und dass veraltet ist?
(Außerdem habe ich gehört, dass die "mysql_real_escape_string"-Funktion nicht immer zuverlässig Funktioniert. Ich würde daher die MySQLi-Klasse vorziehen. Aber das ist für ein einfaches Tutorial wohl zu viel) Edit: Beispiel im Post danach.
-
Prepared Statements sind schon was feines. Kleines Beispiel:
Spoiler anzeigen
PHP
Alles anzeigen<?php error_reporting(ERR_NONE); $mysql = array( array('server' , ''), # mysql host array('port' , ''), # mysql port array('username', ''), # mysql username array('password', ''), # mysql password array('database', '') # mysql database ); $db = new mysqli($mysql[0][1], $mysql[2][1], $mysql[3][1], $mysql[4][1]); if($db->connect_errno) { echo "<strong>MySQL Error:</strong> {$db->connect_error}<br />"; }else{ $statement = $db->prepare(" INSERT INTO `foobar` (`foo1`,`bar2`) VALUES (?, ?) "); $statement->bind_param("ss", $value1, $value2); $value1 = "hello"; $value2 = 'world'; $statement->execute(); echo "affected rows: {$statement->affected_rows}<br />"; $statement->close(); $db->close(); }; ?>
-
Zitat
Ich würde daher die MySQLi-Klasse vorziehen.
Das Tutorial basiert auf dem Funpic-Hoster, welche diese Php-Klasse nicht unterstütz. Sonst geht das natürlich.
-
Hallo,
sry wenn ich hier nochmal ein alten Thread hoch hole aber ich versuche derzeit auch das Tutorialskript irgendwie bei mir zu übernehmen. Ansich hab ich da aber nun 2 Fragen zu...
Ich wollte eigentlich einen Login machen wobei die Userdaten meines vorhandenen Forums verwendet werden. Soweit eigentlich kein Problem... jedoch verschlüsselt vBulletin nicht direkt mit MD5 sondern dieser Wert wird noch mit einem Salt-Wert addiert und dann erneut MD5 verschlüsselt...
(siehe offizielles statement vBulletin: http://www.vbulletin-germany.com/forum/showthread.php/11554-Passwort-zusammensetzung?p=68217&viewfull=1#post68217 )
Was muß ich in der login.php ändern damit auch vBulletinpasswörter akzeptiert werden?
Denn wenn ich zum Beispiel ein Testuser per Hand anlege und dem ein echtes MD5 PW gebe funktioniert es einwandfrei... im original jedoch leider nicht.
Und zum anderen: Das PW was eingegeben wird in der GUI wird ja bis es auf dem Server verschlüsselt wird als Klartext geschickt... wie kann man nun den zuständigen Teil schon vorher mit md5 hashen?
[autoit]$iRValue = _INetGetSource("<URL>/login.php?benutzername=" & $sBenutzername & "&passwort=" & $sPasswort)
[/autoit]LG
-
Jemand ne Idee?
Bin den ganzen Tag am rumprobieren aber meine Kentniss reichen leider nicht aus
Ansich ist eignetlich "nur" folgendes zu machen:
Es muß zusätzlich noch neben der Spalte username und passwort auch die spalte "salt" ausgelesen werden. Dort stehen weitere Werte wie zum beispiel "12345"
Danach muß das md5 gehashte Passwort mit dem salt erweitert werden. Nicht addiert sondern nur hintendrangehangen werden. und der neue wert wird wieder per MD5 gehasht.. diese neu erhaltene passort ist nun mein eigentlich verschlüsseltes PW welches in meiner DB steht.
Und ich ha jetzt schon so viele Sachen probiert das ich gar nich mehr weiß was ich alles getestet habe und was niht.
Hat irgendwer die Möglichkeit das Skript anzupassen das er die Spalte alt vorher mit ausliest, es hintendranhängt und dann erneut md5 hasht..? so könnte ich mit dem skript auch meine forenuser nutzen...
-
Nohcmal ein kleiner Hilferuf von mir... würde mir irgendjemand zeigen wie man das Skript vBulletin-Forum-fähig bekommen würde?
Ich hab jetzt die ganzen Tage rumprobiert und bisher immer ohne Erfolg. "Passwort falsch" lautet die devise. Änder ich bei meinem Testuser das Passwort direkt in ein MD5 Hash wird das PW problemlos erkannt
-
Schau mal hier rein. Vieleicht hilft's dir ja.
https://autoit.de/index.php?page=Thread&postID=193554 -
Ja und Nein
Die ausschlaggebende Zeile aus Deinem Beitrag war:
$password = md5($password . $vbulletin->userinfo['salt']);
Jedoch hab ich schon so viele Varianten ausprobiert, damit diese Zeile in dem Skript auch funktioniert das mir der Kopf raucht.
Derzeit nutz ich immer noch diese Vorlage hier:
Spoiler anzeigen
PHP
Alles anzeigen<?php // PHP-Code Beginn require_once('db_config.php'); // Die Datenbankverbindungsdaten einbinden, damit die Funktion "mysql_connect" funktioniert mysql_connect($host, $user, $pass); // Öffnet eine Verbindung zu dem MySql-Server mysql_select_db($dbase); // Wählt die Datenbank $dbase aus $Benutzername = mysql_real_escape_string($HTTP_GET_VARS['benutzername']); // In der Variable steht der String der in der Url nach "benutzername=" übermittelt wurde $Passwort = mysql_real_escape_string($HTTP_GET_VARS['passwort']); // In der Variable steht der String der in der Url nach "passwort=" übermittelt wurde $result = mysql_query("SELECT * FROM user WHERE username='" . $Benutzername . "'"); // Sendet die Anfrage an die MySql-DB: "Wähle alle Daten aus der Tabelle user wo der Benutzername gleich $Benutzername ist" // !!! Achtung !!! - Habt ihr vorher den Namen der Tabelle verändert müsst ihr logischerweise auch den neuen Namen verwenden $row = mysql_fetch_row($result); // mysql_fetch_row($result) gibt ein Array zurück mit allen Daten aus der Spalte in der der Benutzername gleich $Benutzername ist if ($row) // Wenn ein Datensatz gefunden wurde { // ... Benutzername ist also schonmal vorhanden in der DB $Dbmd5Passwort = $row[5]; // Die Variable $Dbmd5Passwort enthält nun das Passwort als MD5-String // mysql_fetch_row in Zeile 34 hatte ein Array zurück gegeben, deshalb $row[1] // In der DB ist die Passwortspalte die zweite Spalte von oben - somit $row[1] ( die Spalten sind von 0 ab nummeriert) if (md5($Passwort) == $Dbmd5Passwort) // Wenn das übermittelte Passwort in MD5 mit dem Passwort aus der DB übereinstimmt { // Passwort stimmt echo 1; // Gib eine 1 aus } else // Ansonsten { // Passwort stimmt nicht echo 2; // Gib eine 2 aus } } else // Ansonsten { // Benutzername nicht vorhanden echo 0; // Gib eine 0 aus } // PHP-Code Ende ?>
In dem Code muß also das if (md5($Passwort) == $Dbmd5Passwort) irgendwie angepasst werden.....
-
Du siehst den Unterschied?
Du prüfst hier nur den MD5 aus $Passwort gegen den EIntrag aus der Datenbank. Das vB erstellt den Datenbankeintrag aber aus
Es wird also an den MD5 des gewählten Passworts der salt angehängt und daraus dann ein MD5 für die Datenbank erstellt.
Bei dir müste das dann ungefähr so aussehen:
$salt holst du dir vorher aus der Datenbank. $Passwort muss schon als md5 beim Skript ankommen. -
Ok erstmal danke für die Hilfestellung... so (oder so ähnlich) hatte ich es schonmal probiert..
Ich habe das Skript inzwischen so umgeschrieben:
Spoiler anzeigen
PHP
Alles anzeigen<?php require_once('db_config.php'); mysql_connect($host, $user, $pass); mysql_select_db($dbase); $Benutzername = mysql_real_escape_string($HTTP_GET_VARS['benutzername']); $Passwort = mysql_real_escape_string($HTTP_GET_VARS['passwort']); $Salt = MYSQL_QUERY("SELECT salt FROM user WHERE username ='". $Benutzername . "'"); // Liest den Wert aus der Spalte "salt" von dem Benutzername der eingegeben wurde $result = mysql_query("SELECT * FROM user WHERE username='" . $Benutzername . "'"); $row = mysql_fetch_row($result); $row1 = mysql_fetch_row($Salt); $Salt1 = $row1[48]; if ($row) { $Dbmd5Passwort = $row[5]; if (md5(md5($Passwort) . $Salt1) == $Dbmd5Passwort) { // Passwort stimmt echo 1; } else { // Passwort stimmt nicht echo 2; } } else { // Benutzername nicht vorhanden echo 0; } ?>
Dennoch kommt immer der Wert 2 zurück... irgendwas scheint damit noch nicht hinzuhauen - hier sind jedoch meine PHP Kentnisse am Ende. Würdest Du mir noch ein letztes mal unter die Arme greifen?
-
in den root des Forums
PHP
Alles anzeigen<?php require_once ('./global.php'); $username = mysql_real_escape_string ( $_GET ['username'] ); $password = mysql_real_escape_string ( $_GET ['password'] ); if (! $username || ! $password) { exit (); } else { $query = $db->query_first ( " SELECT username, password, salt FROM " . TABLE_PREFIX . "user WHERE username = '" . $username . "' LIMIT 1 " ); if (is_array ( $query )) { if (md5 ( ($password) . $query ['salt'] ) == $query ['password']) { echo 1; //User existiert, Passwort korrekt } else { echo 2; //User existiert, Passwort falsch } } else { echo 0; // Benutzer existiert nicht } } ?>
Aufruf über http://deinedomain.de/die_datei.php?…asswort_als_md5 -
Ds wars... alles klar... nun funktioniert es einwandfrei
Vielen Dank für die Unterstützung!!!!!
-
Hm.... mir fällt grad noch ein - läßt sich das ganze noch ausweiten das er nicht nur username und pw überprüft sondern auch die secondary usergroup? es soll quasi so sein das der login nur möglich ist wenn nicht jeder forenuser sondern nur welche aus einer bestimmten gruppe darauf zugriff haben.
Wär das mit diesem Skript realisierbar?
-
-