tobmes
Goto Top

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
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

Content-ID: 313203

Url: https://administrator.de/contentid/313203

Ausgedruckt am: 23.11.2024 um 03:11 Uhr

129813
Lösung 129813 22.08.2016 aktualisiert um 17:11:03 Uhr
Goto Top
Hi,
you are outputing the class object itself instead of the return value of your class function face-wink 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);
Regards
LordGurke
Lösung LordGurke 22.08.2016 um 23:38:15 Uhr
Goto Top
Stichwort SQL-Injection:
Probier mal aus was passiert, wenn du als Benutzername folgendes eingibst face-wink
 '; INSERT INTO `benutzer` SET `benutzername` = 'blafoo', `passwort` = 'foobar'; \c  
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...
tobmes
tobmes 23.08.2016 um 08:45:20 Uhr
Goto Top
Hi,

vielen Dank für die schnellen Anworten und Tipps von euch.

Gruß
TobMes