Gå til innhold

Lagre passord sikkert i MySQL


Anbefalte innlegg

Skrevet

Har søkt opp litt forskjellig og har funnet mange metoder å hashe passordet, men hvilken metode er mest sikker? Kom gjerne med eksempler, er veldig ny innen PHP.

Videoannonse
Annonse
Skrevet

Jeg har ikke helt greie på hvilken PHP versjon jeg bruker, jeg bruker Xampp nå. Så dette er det mest optimale? Lagre passord:

            $hash = password_hash($pass, PASSWORD_BCRYPT);
            // Denne lagres i databasen når man registrerer seg.

Sjekke passord:

            if (password_verify($pass, $hash)) {
                // Riktig passord.
            }
Skrevet

Om du bruker siste versjon av XAMPP så har du i følge deres nettside PHP 5.6.

 

Implementasjonsforslaget ditt ser stort sett OK ut.

Om du skal være helt på den sikre siden så kan det være en idé å bruke PASSWORD_DEFAULT som algoritme, men det krever også at du håndterer situasjonen der default algoritme har endret seg (det er dette password_needs_rehash() er til). Dette er mest sansynlig ikke nødvendig i ditt tilfelle.

Skrevet (endret)

Om du bruker siste versjon av XAMPP så har du i følge deres nettside PHP 5.6.

 

Implementasjonsforslaget ditt ser stort sett OK ut.

Om du skal være helt på den sikre siden så kan det være en idé å bruke PASSWORD_DEFAULT som algoritme, men det krever også at du håndterer situasjonen der default algoritme har endret seg (det er dette password_needs_rehash() er til). Dette er mest sansynlig ikke nødvendig i ditt tilfelle.

Foretrekker å være på den sikre siden. Er dette riktig, trengs det noen forbedringer?

Logge inn:

if (password_verify($pass, $hash)) {
    if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
        $hash = password_hash($pass, PASSWORD_DEFAULT);
        // Lagre ny passord hash i databasen.
    }
    // Riktig passord, logg inn...
}

Registrering:

       $hash = password_hash($pass, PASSWORD_DEFAULT);
       // Denne lagres i databasen når man registrerer seg.
Endret av waremanu
Skrevet

Dette så veldig riktig ut, og jeg kan ikke si jeg veit om noen umiddelbare forbedringer :)

 

Håper du er like forsiktig med å unngå SQL-injections

Skrevet

Det stemmer vel at du må lage et prepared statement og bruke "?" der du skal ha en variabel og deretter erstatte alle "?" med variabelen? Ihvertfall sånn jeg gjør det i Java, vet ikke helt hvordan det gjøres i PHP ennå. Haha, er det bare meg som synes PHP er rotete i forhold til Java? D:

Skrevet

Prepared statements kan skrive med både ? og :navn.

 

PDO:

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);

$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':value', $value);
Jeg fortrekker den siste da det blir med tydelig hva som hører sammen.
  • Liker 1

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...