Sponsor-Board.de
Antwort schreiben  Thema schreiben 

[PHP] password_hash & password_verify

Verfasser Nachricht

Beiträge: 510
Bewertung: 3
Registriert seit: Apr 2013
Status: offline


Beitrag: #1
[PHP] password_hash & password_verify

Moin,

hab ein Problem mit password_verify.. password_hash wird nach erfolgreicher Registrierung im DB-Feld 'password' zum dazugehörigen User erfolgreich abgelegt.

Allerdings kriege ich kein Match, wenn ich mich dann einloggen will..

Hier mal die PHP:

PHP-Code:
<?php
     
require('db.php');
     function 
redirect($DoDie true) {
        
header('Location: success.php');
        if (
$DoDie)
        die();
     }
     
session_start();
     if(isset(
$_SESSION['username'])) {
        
redirect();
    }
        
// If form submitted, insert values into the database.
        
if (isset($_POST['username'])){
            
$username stripslashes($_REQUEST['username']); // removes backslashes
            
$username mysqli_real_escape_string($con,$username); //escapes special characters in a string
            
$password stripslashes($_REQUEST['password']);
            
$password mysqli_real_escape_string($con,$password);
            
$hash_query "SELECT password FROM `user` WHERE username='$username'";
            
$hash_result mysqli_query($con,$hash_query) or die(mysql_error());
            
$ipaddress $_SERVER['REMOTE_ADDR'];

            
//Checking is user existing in the database or not
            
$query "SELECT * FROM `user` WHERE username='$username' and password='$password'";
            
$result mysqli_query($con,$query) or die(mysql_error());
            
$rows mysqli_num_rows($result);
            if(
$rows==1){
                if (
password_verify($password$hash_result)) {
                    
$_SESSION['username'] = $username;
                    
$trn_date date("Y-m-d H:i:s");
                    
$query "UPDATE `user` SET `ip` = '$ipaddress', `last_login` = '$trn_date' WHERE `username` = '$username'";
                    
$result mysqli_query($con,$query) or die(mysql_error());
                    
$rows mysqli_num_rows($result);
                    
header("Location: success.php"); // Redirect user to index.php
                
}
                else {
                    
header("Location: error.php");
                }
            }
            else {
                
header("Location: error.php");
            }
        }
        else {

     
?>


Vielleicht kann mir jemand helfen.


Mit freundlichen Grüßen,
Jerr0w ~

15.09.2017 09:11
 
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren

Beiträge: 11
Bewertung: 1
Registriert seit: Jul 2017
Status: offline


Beitrag: #2
RE: [PHP] password_hash & password_verify

Moin Jerr0w,

Im oberen Teil fragst du nach dem Password des Users in der Datenbank.

PHP-Code:
$hash_query "SELECT password FROM `user` WHERE username='$username'"


Das hashed Passwort findest du dann in deiner Variabel "$hash_result".

Dies ist soweit korrekt.

Nun zum zweiten Teil.
Dort findet man einen Fehler im ersten Query.

PHP-Code:
$query "SELECT * FROM `user` WHERE username='$username' and password='$password'"

Da das Passwort in der Datenbank einen Hash ist kannst du nicht ein Passwort im Klartext damit vergleichen.

Deshalb kriegst du immer eine Fehlermeldung.

Eine Möglichkeit wäre zum Beispiel folgende.

PHP-Code:
$password_hash password_hash($passwordPASSWORD_DEFAULT);
$query "SELECT * FROM `user` WHERE username='$username' and password='$password_hash'"

Dieser Beitrag wurde zuletzt bearbeitet: 15.09.2017 10:02 von TwIXx.

15.09.2017 09:45
 
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren

Beiträge: 510
Bewertung: 3
Registriert seit: Apr 2013
Status: offline


Beitrag: #3
RE: [PHP] password_hash & password_verify

Hi TwIXx,

wenn ich das Passwort erneut hashen lasse beim Login, funktioniert doch meine Verify-Funktion nicht mehr?

Soweit ich password_verify verstehe, wird das Plaintext-Passwort durch Eingabe ins Formular übergeben. Dieses wird dann durch die Funktion password_verify generell gehashed. Anschließend werden die beiden Hashes miteinander verglichen und wenn es ein Match gibt -> Login.

Falls ich das irgendwie falsch verstanden habe, bitte korrigieren Smile

Wäre es möglich, dass du dich bei mir mal in Telegram oder so meldest? ([Link: Registrierung erforderlich]) bin für jede Hilfe sehr dankbar. Smile


Mit freundlichen Grüßen,
Jerr0w ~

Dieser Beitrag wurde zuletzt bearbeitet: 15.09.2017 10:04 von Jerr0w.

15.09.2017 10:03
 
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren

Beiträge: 11
Bewertung: 1
Registriert seit: Jul 2017
Status: offline


Beitrag: #4
RE: [PHP] password_hash & password_verify

Hi Jerr0w,

Hast völlig recht Biggrin, man sollte jeweils den ganzen Eintrag Lesen. Nicht nur die ersten paar Zeilen.

Schreibe dich trotzdem Mal in Telegram an.

LG
TwIXx

15.09.2017 10:08
 
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren

Beiträge: 1.455
Bewertung: 10
Registriert seit: Jan 2012
Status: offline


Beitrag: #5
RE: [PHP] password_hash & password_verify

Benutz einfach das Passwort nicht im SELECT_Query, weil du kannst auch über password_hash nicht mehr das selbe Ergebnis kriegen, da ein kombinierter String aus Hash und dem einmaligen Zufalls-Salt generiert wird.

Die Funktionen nehmen dir quasi die komplette Arbeit ab - du musst nur den Rückgabewert von password_verify nutzen, ansonstne nirgends das Passwort überprüfen oder so.

Also in Pseudocode:

Nicht

Code:
SELECT USER WHERE username = $username and password = $password

IF password_verify($result_of_select, $password_to_check): SUCCESS


sondern

Code:
SELECT USER WHERE username = $username

IF password_verify($result_of_select, $password_to_check): SUCCESS



Allgemein wäre z.B. nach "SELECT USER WHERE username = $username and password = $password_which_was_entered_as_hash" sofern du nur den Hash gespeichert hast eine weitere PW-Prüfung unnötig. Unter PHP wäre das aber eher das Gegenteil von best practices, weil man unter PHP die beiden von dir genannten Funktionen nutzen sollte (oder selber zufällige Salts nutzen, aber da nimmt einem PHP ja bereits die Arbeit ab).

Dieser Beitrag wurde zuletzt bearbeitet: 15.09.2017 12:22 von Schwester Wombat.

15.09.2017 12:18
 
Alle Beiträge dieses Benutzers finden Diese Nachricht in einer Antwort zitieren
Antwort schreiben  Thema schreiben 

 Druckversion anzeigen
 Thema einem Freund senden
 Thema abonnieren
 Thema zu den Favoriten hinzufügen

Sponsor-Board.de

Community
Über uns
Partner
Powered by Mybb: Copyright 2002-2024 by MyBB Group - Deutsche-Übersetzung von Mybb.de
 
© 2007-2024 Sponsor-Board.de - Hosted by OVH

Willkommen auf SB!   Sie benötigen ein Sponsoring?   1. Anmelden   2. Sponsoring-Anfrage erstellen   3. Nachrichten von Sponsoren erhalten   Kostenlos!   Jetzt registrieren