Avatar billede SSC Juniormester
06. november 2020 - 00:22 Der er 3 kommentarer

Ændre 'hashed' password

Hej ComputerWorld,

Efter at have rodet med dette problem i længere tid, vælger jeg nu at søge hjælp:

Jeg har denne kode, som virkede fint, før jeg 'krypterede' (hash) password i db

Men efter, får jeg konsekvent "koden er forkert"

<?php

require_once 'header.php';
session_start();
$con = new mysqli('localhost', 'robinsnest', 'xxxxxxxx', 'robinsnest');

$user=$_SESSION["user"];

if ($con->connect_errno) {
    echo "Failed to connect to MySQL: (" . $con->connect_errno . ") " . $con->connect_error;
}
if ($_POST["newPass"] == $_POST["confirmPass"]) {
    $stmt = $con->prepare("SELECT * FROM members WHERE user=? LIMIT 1");
    $stmt->bind_param("s", $user);
// execute
    $stmt->execute();
    $result = $stmt->get_result();
    while ($row = $result->fetch_assoc()) {
        if ($_POST["currentPass"] == $row["pass"]) {
            $updateStmt = $con->prepare("UPDATE members SET pass=? WHERE user=?");
            $updateStmt->bind_param("ss", $_POST["newPass"], $user);
            $updateStmt->execute();
            $message = "Password changed successfully!";
        } else {
            $message = "Password is incorrect.";
        }
    }

}
echo $message;
?>

Er der en, der har forslag til, hvordan jeg laver en ændre-kode-applikation, når kodeordet er krypteret i databasen?
Avatar billede SSC Juniormester
06. november 2020 - 00:56 #1
(Bemærk koden er fiktiv, det er ikke en rigtig db)
Avatar billede Slater Ekspert
06. november 2020 - 07:29 #2
Denne linje vil jo naturligvis aldrig virke, når du har hashet dit password:
$_POST["currentPass"] == $row["pass"]

- Du kan ikke sammenligne et plaintext og et hashet password med almindelig ==
Men hvordan hasher du det da? Du viser ikke det mest relevante.

Mht. at ændre det, er det altid bare at oprette et nyt password og gemme det i stedet for det gamle. Hvis nogen har glemt deres password, kan du kun sende et nyt autogenereret til dem og bede dem rette det. Du kan aldrig sende dem det gamle password.
Avatar billede olsensweb.dk Ekspert
06. november 2020 - 08:58 #3
#0
kig på de fremhævet linjer
<?php
session_start();
include("debug.php");
require_once('connection.php');
if (isset($_POST["newPass"])) {
    $user = "rip"; // test
// $user=$_SESSION["user"]; // udkommenteret under test
    if ($_POST["newPass"] == $_POST["confirmPass"]) {
        $stmt = $con->prepare("SELECT * FROM members WHERE user=? LIMIT 1");
        $stmt->bind_param("s", $user);
        $stmt->execute();
        $result = $stmt->get_result();
        while ($row = $result->fetch_assoc()) {
            if (password_verify($_POST["currentPass"], $row["pass"])) {   
            // if ($_POST["currentPass"] == $row["pass"]) {

                $updateStmt = $con->prepare("UPDATE members SET pass=? WHERE user=?");
                $hash = password_hash($_POST["newPass"], PASSWORD_DEFAULT);
                $updateStmt->bind_param("ss", $hash, $user);
                // $updateStmt->bind_param("ss", $_POST["newPass"], $user);

                $updateStmt->execute();
                $message = "Password changed successfully!";
            } else {
                $message = "Password is incorrect.";
            }
        }
    } else {
        $message = "de 2 nye password er ikke ens";
    }
}
?>


#2
>Men hvordan hasher du det da?
fra spørgerens tidligere spm ( https://www.computerworld.dk/eksperten/spm/1035126?k=8367025 ) må svaret være password_hash

>Hvis nogen har glemt deres password, kan du kun sende et nyt
sådan bør det også være, password må aldrig stå i klar text, i databasen, brugeren er jo logget ind når han ændre password (står i session), men om han skal angive det gamle password også? måske, det hindre andre går hen på maskinen brugeren er logget ind på, og ændre brugerens password.
der er jo en del der forlader maskinen uden at logge af / låse skærmen, så andre kan misbruger brugeren
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester