[PHP] MySQL Werte ausgeben

  • Okay, ich denke ich habe das fetch_array jetzt verstanden, aber jetzt immer wenn ich mein Passwort eingebe, sagt der "Erfolgreich eingeloggt!" egal was ich eingebe o;


  • 1. was hat bitte ein Simikolon am Ende einer Abfrage verloren?


    Das habe ich nicht bemerkt, aber jetzt wo es weg ist, steht da nix mehr o.o


    2. desweiteren, was fragst du $passwort (leere Variable laut deinem "Script") mit $user['Passwort'] ab?


    $passwort ist nicht leer.. Das ist das, was der Spieler beim Passwort eingibt


    PHP
    $passwort = $_POST["Passwort"];
  • Also wenn ich es so habe:


    PHP
    print_r("\$sql = $sql"); echo "<br>";
    	print_r("\$db_erg = $db_erg"); echo "<br>";
    	print_r("\$passwort = $passwort"); echo "<br>";
    	print_r("\$username = $username"); echo "<br>";
    	print_r("\$user['Passwort'] = ",md5($user['Passwort']));


    Zeigt er alles richtig an (denke ich) aber die letzte Zeile zeigt der nix an..


    PHP
    $sql = SELECT * FROM accounts WHERE Name = 'Sh12'
    $db_erg = Resource id #4
    $passwort = ************
    $username = Sh12
  • jap, doppeltes hashen ist ja eigentlich auch viel sicherer :)


    Falsch, es könnte zwar sein, dass bei einer mehrfachen Anwendung eine Brute-Force-Attacke etwas länger brauchen könnte, jedoch steigt die Gefahr von neuen Attacken. Ebenfalls wird bei Algorithmen immer dazu notiert, ob es sicher ist, diesen Algorithmus mehrfach anzuwenden oder nicht, da es evt. zu Ausnahmesituationen kommen kann.


    Zitat

    Jo schon, aber ich würde ihn ja gerne "unhashen" ;/


    Das tut man nicht - Man speichert das Passwort gehasht und hasht die Eingabe, um es mit dem gespeicherten gehashten Passwort zu vergleichen.


    PHP
    $res = mysql_query("SELECT `Passwort` FROM `accounts` WHERE `Name` = '". mysql_real_escape_string($username) ."'"); // Query ausführen und Ergebnis der Abfrage in $res speichern.
    $row = mysql_fetch_array($res); // mysql_query() gibt eine Resource zurück, daher speichern wir unsere Ergebnisse in Form eines Arrays in $row.
    
    
    if($row['Passwort'] == md5($_POST['Passwort']) { // Gehashtes Passwort aus Datenbank mit neuem Hash der Eingabe vergleichen.
        // Eingeloggt.
    } else {
        // Falsche Eingabe.
    }
  • Geht immernoch nicht, langsam macht mich das Ding verrück..
    Ich schicke mal ganzen Code, vllt könnt ihr damit mehr anfangen ;<


    HTML-Teil:

    PHP
    <html>	<head>		<title>VisionRPG - UCP</title>	</head>	<body>		<h1>User Control Panel</h1>		<h2>German Vision Reallife</h2>		<br/><br/>		<form action="mysql.php" method="post">			Username:<input type="text" size="20" name="Username"><br/>			Passwort:<input type="text" size="20" name="Passwort"><br/>			<input type="submit" value="Einloggen">		</form>	</body></html>


    PHP-Teil:

    PHP
    <?php	error_reporting(E_ALL);	$connect = mysql_connect("localhost","root","");	$database = mysql_select_db("gta");	$username = $_POST['Username'];	$passwort = $_POST['Passwort'];	$sql = "SELECT * FROM accounts WHERE Name = '".$username."'";	$db_erg = mysql_query($sql);	$user = mysql_fetch_array($db_erg);	if($username == "" or $passwort == "") {		echo "Du hast nicht alle Felder ausgefüllt!";		exit;	}	else if($user['Passwort'] == md5($passwort))	{		echo "Erfolgreich eingeloggt!";	}	mysql_close($connect);?>


  • Falsch, es könnte zwar sein, dass bei einer mehrfachen Anwendung eine Brute-Force-Attacke etwas länger brauchen könnte, jedoch steigt die Gefahr von neuen Attacken. Ebenfalls wird bei Algorithmen immer dazu notiert, ob es sicher ist, diesen Algorithmus mehrfach anzuwenden oder nicht, da es evt. zu Ausnahmesituationen kommen kann.


    Nja, auf jedenfall sicherer als 1maliges md5, da z.B. die meisten Passwort-Tabellen auf md5 ausgelegt sind, nicht auf doppeltes md5.
    Auch das 'etwas länger brauchen' ist nicht unter den Tisch zu kehren.


    Sicherlich ist es nicht besonders sicher, aber für einen PHP-Anfänger reicht es meiner Meinung nach alle Mal.


    //Edit: Zu Sh12:


    Du hattest ja in diesem Thread einmal deinen md5-hash aus der Datenbank geposted, wenn ich mich recht erinnere war der in Großbuchstaben.
    Villeicht könnte das dein Problem sein: Die PHP-Funktion md5() gibt einen String zurück, in dem die Buchstaben klein sind.
    Anscheinend gibt dein SA:MP-Skript, oder was auch immer den MD5-String in die Datenbank schreibt, den MD5-String in Großbuchstaben an, was jedoch für PHP (und ich glaub so ziemlich jede andere Script/Programmiersprache auch) nicht dasselbe ist.


    Mein Lösungsvorschlag wäre jetzte folgender:


    PHP
    /* Zeile 17 */ else if(strtolower($user['Passwort']) == md5($passwort))


    Die Funktion strtolower gibt dir das gehashte Passwort der Datenbank dann in Kleinbuchstaben zurück, was dein Problem, wenn es das meiner Annahme ist, löst...

  • Es passiert aber garnichts :O


    Auch wenn ich nichts eingebe sollte eig der Text kommen:
    Du hast nicht alle Felder ausgefüllt!


    Aber das Kommt auch nicht, egal was ich mache D;


    //EDIT:
    Gibt es vielleicht iwo ein Beispielscript für sowas, dass man
    sich das anschauen könnte? D:


    //EDIT2:
    Kann vielleicht einer auch über TeamViewer drüberschauen? :S

    Einmal editiert, zuletzt von Sh12 ()

  • Hab das mal aus dem Login-Skript einer selbst gecodeten Website genommen:



    Hoffe das hilft dir weiter

  • Jetzt habe ich es so:


    PHP
    <?php	$connect = mysql_connect("localhost","root","");	$database = mysql_select_db("gta");	$username = $_POST['Username'];	$passwort = $_POST['Passwort'];	$sql = 'SELECT * FROM accounts WHERE Name=\''.mysql_real_escape_string($username).'\'';	$result = mysql_query($sql);	$user = mysql_fetch_array($db_erg);	if(mysql_num_rows($result) > 0) {		//Benutzer vorhanden		$data = mysql_fetch_array($result);		if($data['password']==md5(md5($passwort))) {			//Passwort korrekt			$_SESSION['number'] = $data['userID'];			echo "Erfolgreich eingeloggt";		} else {			//Passwort falsch			echo "Falsches Passwort";		}	} else {		echo "Ungültiger Name";		//Benutzer nicht vorhanden	}	mysql_close($connect);?>


    Aber wenn ich jetzt mich einlogge steht da::


  • do.de - Domain-Offensive - Domains für alle und zu super Preisen