Passwort verschlüsselt speichern
Hi Experten,
ich bastle gerade wieder ein bischen mit PHP rum. Ich habe mir mit PHP ein Login-Script gebastelt. Das hat auch alles gut geklappt. Jetzt wollte ich zum hashen des Passwortes aber die PHP eigene Funktion password_hash() verweden. Hier mal die verwendeten Code auszüge. Mit der $pass = sha1($pass) variante hat es auch gut funktioniert
addNewUser.php
Und hier mal die password.php
Als Fehlermeldung erhalte ich dann immer
PHP Catchable fatal error: Object of class password could not be converted to string in /var/www/tobmes/addNewUser.php on line 89, referer: http://127.0.0.1/tobmes/addNewUser.php
Und als Ausgabe mittels vardump
object(password)#5 (0) { }
Leider verstehe ich gerade nicht, was genau das Problem ist. Denn password_hash() hat doch als return value String. Ich danke euch schon mal für die Hilfe
Gruß
-TobMes
ich bastle gerade wieder ein bischen mit PHP rum. Ich habe mir mit PHP ein Login-Script gebastelt. Das hat auch alles gut geklappt. Jetzt wollte ich zum hashen des Passwortes aber die PHP eigene Funktion password_hash() verweden. Hier mal die verwendeten Code auszüge. Mit der $pass = sha1($pass) variante hat es auch gut funktioniert
addNewUser.php
public function addNewUser($user, $pass)
{
$sql = "SELECT benutzername FROM benutzer WHERE benutzername = '$user';";
if ($result = mysqli_query($this->db, $sql)) {
$rowCount = mysqli_num_rows($result);
if ($rowCount > 0) {
$this->message = '<p class="alert alert-danger fade in">User existiert bereits</p>';
} else {
//Passwort mit SHA1 hashen
//$pass = sha1($pass);//alt
$hash = new password();
$hash->hashSaltPass($pass);
var_dump($hash);
//echo $password;
//SQL-Injektion verhindern
$user = $this->db->real_escape_string($user);
//Benutzer in Datenbank einfügen
$sql = "INSERT INTO benutzer(benutzername,passwort) VALUES('$user','$hash');";
if (!$sql) {
throw new Exception('Fehler beim schreiben in die Datenbank', $sql);
$this->message = 'Fehler beim anlegen des Benutzers';
}
mysqli_query($this->db, $sql);
$this->message = '<p class="alert alert-success fade in"> User erfolgreich eingetragen</p>';
}
}
}
Und hier mal die password.php
<?php
/**
*
*/
class password
{
public function hashSaltPass($pass)
{
$hash = password_hash($pass, PASSWORD_DEFAULT);
return $hash;
}
}
Als Fehlermeldung erhalte ich dann immer
PHP Catchable fatal error: Object of class password could not be converted to string in /var/www/tobmes/addNewUser.php on line 89, referer: http://127.0.0.1/tobmes/addNewUser.php
Und als Ausgabe mittels vardump
object(password)#5 (0) { }
Leider verstehe ich gerade nicht, was genau das Problem ist. Denn password_hash() hat doch als return value String. Ich danke euch schon mal für die Hilfe
Gruß
-TobMes
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 313203
Url: https://administrator.de/contentid/313203
Ausgedruckt am: 23.11.2024 um 03:11 Uhr
3 Kommentare
Neuester Kommentar
Hi,
you are outputing the class object itself instead of the return value of your class function That's the reason!
Write the result of your function into a variable and dump that.
Regards
you are outputing the class object itself instead of the return value of your class function That's the reason!
Write the result of your function into a variable and dump that.
$hash = new password();
$result = $hash->hashSaltPass($pass);
var_dump($result);
Stichwort SQL-Injection:
Probier mal aus was passiert, wenn du als Benutzername folgendes eingibst
Lasse dir notfalls mal die Variable $sql ausgeben um zu sehen, was an den Datenbankserver geschickt wird.
Und dann benutze zukünftig bei *jedem* vom Benutzer kontrollierbaren Wert mysqli_real_escape_string() ;)
Denn das ist noch harmlos. Wenn ich es drauf anlegen würde, könnte ich so per UPDATE auch ein Kennwort eines bekannten Nutzers ändern. Oder per TRUNCATE die gesamte Tabelle leeren. Oder...
Probier mal aus was passiert, wenn du als Benutzername folgendes eingibst
'; INSERT INTO `benutzer` SET `benutzername` = 'blafoo', `passwort` = 'foobar'; \c
Und dann benutze zukünftig bei *jedem* vom Benutzer kontrollierbaren Wert mysqli_real_escape_string() ;)
Denn das ist noch harmlos. Wenn ich es drauf anlegen würde, könnte ich so per UPDATE auch ein Kennwort eines bekannten Nutzers ändern. Oder per TRUNCATE die gesamte Tabelle leeren. Oder...