Bist du sicher, dass die Auswahl der Datenbank klappt?
Könntest mal testweise den SELECT-Query so umbauen: ... FROM login.auth ...
Und was gibt dieser Befehl aus (vor das "if" packen)?
Code:var_dump(mysql_num_rows($result));
Druckbare Version
Bist du sicher, dass die Auswahl der Datenbank klappt?
Könntest mal testweise den SELECT-Query so umbauen: ... FROM login.auth ...
Und was gibt dieser Befehl aus (vor das "if" packen)?
Code:var_dump(mysql_num_rows($result));
Ja das bin ich mir sicher denn wen ich mich mit einem User ohne Passwort anmelde funtioniert es.
Sorry hab ich nicht ganz verstanden was du meinst.Code:Könntest mal testweise den SELECT-Query so umbauen: ... FROM login.auth ...
Das gibt einCode:var_dump(mysql_num_rows($result));
zurück.Code:int(0)
Jetzt habe ich auch noch herausgefunden:
Wenn ich einen neuen Eintrag in die MySQL mache bei dem das Passwort unverschlüsselt ist funktioniert es auch sprich es liegt irgendwie an der verschlüsslung.
Hier nochmals der Code:
PHP-Code:
<?php
error_reporting(E_ALL);
require ("../config.php"); //include config file
connect(); //connect database
select_db_login(); //select database
//Login prüfen
$sql = "SELECT
id,
user,
password
FROM
auth
WHERE
(user = '".mysql_real_escape_string($_POST['user'])."')
AND
(password =PASSWORD('".mysql_real_escape_string($_POST['password'])."'))
";
$result = mysql_query ($sql);
if (mysql_num_rows($result) > 0)
{
header("Location: loged_in.html");
}
else
{
echo "fehler";
//header ("Location: style.css");
}
?>
Welchen Datentyp hat in der MySQL-Tabelle die Spalte "password"?
varchar(30)
Dann kann das ja nicht gehen ...
Wie hier steht http://dev.mysql.com/doc/refman/5.0/...d-hashing.html sind die Hashes von PASSWORD() immer 41 Byte lang. Und wenn du 41 Zeichen in ein 30-Zeichen-Feld einträgst, wird der Rest verworfen.
Abgesehen davon soll man PASSWORD() ja eh nicht nutzen: http://dev.mysql.com/doc/refman/5.0/...ction_password
Und da du das nun eh umschreibst, kannst du auch gleich einen Salted Hash - siehe http://de.wikipedia.org/wiki/Salted_Hash - nehmen (hierfür die Spalte password auf varchar(40) ändern, da SHA1 20 Byte lang ist, also hexadezimal angegeben 40 Byte):
SALT wird in der config.php definiert:Code:... WHERE
(user = '".mysql_real_escape_string($_POST['user'])."')
AND
(password ='".sha1($_POST['password'] . SALT)."')
Noch sicherer ist es, wenn jeder User einen anderen Salt hat, also kannst du das auch gleich noch machen:PHP-Code:
define('SALT', 'hier irgendeine zufällige Zeichenfolge eintragen');
Die Tabelle auth kriegt eine zusätzliche Spalte salt (z.B. irgendein varchar). Beim Anlegen eines Users und bei jeder Passwortänderung wird diese mit einem zufälligen String gefüllt. Die Abfrage würde dann so aussehen:
Damit hättest du also zwei Salts und doppeltes Hashing (eines durchgeführt in PHP, damit das Passwort nicht in Klartext an den SQL-Server übertragen werden muss).Code:... WHERE
(user = '".mysql_real_escape_string($_POST['user'])."')
AND
(password = SHA1(CONCAT(salt, '".sha1($_POST['password'] . SALT)."')))
Neuen User anlegen:
PHP-Code:
$salt = zufallsfunktion();
$hash = sha1($salt . sha1($password . SALT));
query("INSERT INTO ... VALUES (..., '".mysql_real_escape_string($salt)."', '$hash')");
Hi,
Vielen Dank erst mal für eure Antworten ich werde das bei Gelegenheit mal ausprobieren.
Wenn's nicht klappt melde ich mich wieder:D
MFG
Kevin Haag