password hash geeft false aan

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Mathieu Posthumus

Mathieu Posthumus

04/11/2014 11:25:40
Quote Anchor link
Hee mensen,

Ik heb een 'password_hash' functie gebruikt om mijn wachtwoord op te slaan in de db, en dus wanneer ik wil inloggen gebruik ik dus de 'password_verify' functie.

Alleen hij geeft dus aan dat het niet klopt. ik heb allebij de gegevens dus het ingevoerde wachtwoord door de gebruiker en de gehasde password die in de db staat allebei ge echo'd en ze kloppen waarom werkt dit niet dan?

please help :s

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$hash
=  $user['password'];
echo $_POST['password'] . ' ' . $hash;
if (password_verify($_POST['password'], $hash)) {
    $_SESSION['user'] = $user;                                                                            ?>

    <script>
        alert('blha')$(document).ready(function(){
            $('#msgfield').css("background-color", "#888800");
            $('#msgfield').html("Welcome back, <?=$user['screenname']?>.");
            $('#msgfield').fadeIn('slow');
        })
    </script>                                                                                            <?php
}
else {                                                                                                    ?>

    <script>
        $(document).ready(function(){
            $('#msgfield').text("Incorrect password.");
            $('#msgfield').fadeIn('slow');
        });
    </script>                                                                                            <?php
}
?>
Gewijzigd op 04/11/2014 11:29:11 door Mathieu Posthumus
 
PHP hulp

PHP hulp

05/11/2024 07:56:28
 
Pipo Clown

Pipo Clown

04/11/2014 11:36:54
Quote Anchor link
Ik neem aan dat in $hash het versleutelde paswoord staat zoals je het uit de database haalt en dat in $_POST['password'] het onversleutelde paswoord staat zoals je het inleest vanuit het input veld ?
 
Eddy E

Eddy E

04/11/2014 11:46:43
Quote Anchor link
Wat geeft echo $_POST['password']?
Wat geeft $hash?

Ik neem aan dat ze niet hetzelfde zijn.
Plaats de code van password_verify() eens.
 
Dos Moonen

Dos Moonen

04/11/2014 16:44:45
Quote Anchor link
Eddy E op 04/11/2014 11:46:43:
Plaats de code van password_verify() eens.

http://lxr.php.net/xref/PHP_5_6/ext/standard/password.c#273
https://github.com/ircmaxell/password_compat/blob/master/lib/password.php#L219

Anyway, var_dump() is iets fijner tijdens het debuggen. Het print dingen op verschillende regels...

Je hebt ons wel de code van de inloggen gegeven, maar niet de data die je via de echo weergeeft op het scherm. Wat wel handig is.
Ook de registratie code zou ik wel graag willen zien.
Gewijzigd op 04/11/2014 16:45:28 door Dos Moonen
 
Mathieu Posthumus

Mathieu Posthumus

04/11/2014 21:13:57
Quote Anchor link
Srry voor laate reactie moest werken... maar wat ik voor dat krijg van het echoën is (password123 $2y$10$FfrPMUZAJScIYjCks/K/eeIVf/lLkRcRr849Y/hmULO)

Toevoeging op 04/11/2014 21:15:02:

En wat ik in mijn registratie heb staan is...


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
function register_user($user_data, $profile_data) {
    global $con;
    array_walk($user_data, 'array_sanitize');
    array_walk($profile_data, 'array_sanitize');

    $user_data['password'] = password_hash($user_data['password'], PASSWORD_BCRYPT);

    $fields_user = implode(', ', array_keys($user_data));
    $data_user = '\'' . implode('\', \'', $user_data) . '\'';

    $fields_profile = implode(', ', array_keys($profile_data));
    $data_profile = '\'' . implode('\', \'', $profile_data) . '\'';

    mysqli_query($con, "INSERT INTO users($fields_user) VALUES ($data_user)");
    mysqli_query($con, "INSERT INTO profile($fields_profile) VALUES ($data_profile)");
}

?>
 
Dos Moonen

Dos Moonen

04/11/2014 22:23:11
Quote Anchor link
Ik ga er van uit dat je tijdens het registreren 'password123' hebt ingevuld, en dus geen typo gemaakt hebt.
Het lijkt er dat op regel 7 $user_data['password'] niet meer 'password123' is.
Als $user_data['password'] aan het begin van de functie nog wel 'password123' dan wijzigt je functie array_sanitize() de waarde.

Dat betekend dat je tussen regels 2 en 4, en ook tussen regels 5 en 6 een var_dump($user_data) moet plaatsen en kijken wat de waarde is die je hashed. Als dat de waarde is die je invoert moet je login code werken.

PS. regels 15 en 16 zien er lelijk uit. Weet je van het bestaan van prepared statements af?
PPS. het $fields_* gedeelte vind ik prima, $data_* zou ik vervangen door x aantal vraagtekens gescheiden door komma's in combinatie met prepared statements.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.