Kryptere passwords i eksisterende database

Tags:    php mysqli login database

<< < 12 > >>
Jeg har en database med nogle brugere.
Password ligger i databasen som ren tekst, og jeg vil gerne have dem krypteret i forbindelse med nyt login system.

hvordan gør jeg det? md5

Jeg bruger dette login system/ kode:

Fold kodeboks ind/udKode 




13 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 8 karma
Sorter efter stemmer Sorter efter dato
Lad være med at bruge md5 - det giver knap mere beskyttelse end at gemme den rå adgangskode baglæns. Du kan bruge password_verify og password_hash i stedet. Måden password_hash fungerer på er at den generer en sikker, og på en sikker måde, en hash for brugeren. Så når der oprettes en ny bruger kalder du en og giver dig en hash som du gemmer i stedet for koden i databasen. Denne hash er tilfældig genereret, så selv med samme input vil den give et andet output. Derfor kan du ikke bruge den til at validere med, men der har du password_verify til.

Så når en bruger logger ind har du brugernavn og kodeord i $brugernavn og $password henholdvis. Så udtrækker du den gemte hash i databasen, og bruger password_verify til at se om den kodeordet er det rigtige:

Fold kodeboks ind/udPHP kode 


Når du så opretter nye brugere genererer du den hash som skal ligge i databasen ved:

Fold kodeboks ind/udPHP kode 


Hvis du har plads til 256 tegn til hash/password feltet, bør du bruge PASSWORD_DEFAULT i stedet for _BCRYPT.

Der er 2 stategier for at rette de eksisterende koder/hash. Den ene er at du tjekker når en bruger logger ind om det er et "gammelt" password i databasen, og hvis så, så opdaterer du den til en hash. Den anden måde, hvilket du kun kan bruge fordi du har de rå passwords, er at ændre dem alle på en gang. Dette kan gøres ved at køre noget lignende dette på alle brugere, men det kan godt blive noget beregningsintensivt:

Fold kodeboks ind/udPHP kode 






Indlæg senest redigeret d. 28.07.2017 19:50 af Bruger #14645
du kan krypterer alle dine password i et hug

database før
Fold kodeboks ind/udKode 


med dette script.
nb må kun køres 1 og kun 1 gang

Fold kodeboks ind/udKode 


database efter
Fold kodeboks ind/udKode 


som du kan se har alle brugerne sammen password, men hvis du kunne i databasen efter ser det ikke ud som de har sammen password, årsagen er forskællig salt

nu kan en person der har / får adgang til databasen ikke se brugerne password :), nu kan du ikke sende brugeren hans nuværende password, hvis han skulle have glemt det, men skal lave et nyt password og sende til ham, og sådan bør det også være.

logon side
Fold kodeboks ind/udKode 



et andet sted du kan forbedre din sikkerhed er ved at bruge Prepare Statement, en mini guide er
www.computerworld.dk/uploads/eksperten-guider/1480-Prepared-Statements-under-MySQLI-kom-igang.pdf




Har eksporteret til word og sendt en besked til dig

hvorfor ligger du det ikke i tråden ?? så kan andre bidrage


Update - nu har jeg fået ændret password.
Det var connection filen der lige skulle justeres fordi jeg har brugt andre "navne" end du har.

jeg har brugt det navn du har angivet

// $db = er erkløret her (mysqli connection)
require_once("../Connect2.php"); //Establishing connection with our database

jeg havde lagt min Connect2.php sammen sted som filerne, hvor har lagt den 1 bibliotet tilbage, men det giver en fejl hvis det står forkert
og hvis require_once("../Connect2.php"); retunerer en variabel der hedder $db, der indeholder en mysqli connection, så er jeg tilfreds



Hvordan laver jeg så min opret bruger side?

det har Søren Enevoldsen besvaret 28.07.17 19:49

modificeret code (utested)
Fold kodeboks ind/udKode 

du vil sikkert også indsætte en del andre felter samtidig





Tak for dit svar.
Det skal jeg lige have læst godt igennem og set på.

Hvis jeg ændre alle password på én gang i databasen. Kan brugeren så logge ind med det password han/ hun har valgt i sin tid?




Indlæg senest redigeret d. 28.07.2017 20:23 af Bruger #17644
Tak for dit svar.
Det skal jeg lige have læst godt igennem og set på.

Hvis jeg ændre alle password på én gang i databasen. Kan brugeren så logge ind med det password han/ hun har valgt i sin tid?

Det eneste brugeren giver dig er brugernavn og kode. Normalt ville du vente til brugeren logger ind igen for at opdatere til en ny hash fordi det er nødvendigt at have brugerens kode til at lave dette. Men siden du pt. har den behøver du ikke at vente. Så ja, så længe den samme brugers fremtidige hash er genereret ud fra deres kodeord så vil det virke.

Jeg anbefaler at du tager en backup af databasen før du gør dette, eller hvertfald den tabel med kodeord i. Og husk nu at ændre kolonnetypen så den er mindst 60 tegn bred, hvis PASSWORD_BCRYPT, ellers skal den være 256, hvis PASSWORD_DEFAULT.



Indlæg senest redigeret d. 28.07.2017 21:19 af Bruger #14645
Jeg skal lige forstå det her rigtig.

Password_hash funktionen opretter en hashet version af et givent password. Bliver der brugt salt i den sammenhæng?
Hvis ja, hvordan ved password_verify så at den skal bruge lige det salt?



Indlæg senest redigeret d. 29.07.2017 20:25 af Bruger #15663
Password_hash funktionen opretter en hashet version af et givent password. Bliver der brugt salt i den sammenhæng?
Hvis ja, hvordan ved password_verify så at den skal bruge lige det salt?



ref http://php.net/manual/en/function.password-hash.php
Supported Options:

salt - to manually provide a salt to use when hashing the password. Note that this will override and prevent a salt from being automatically generated.

If omitted, a random salt will be generated by password_hash() for each password hashed. This is the intended mode of operation.

Warning
The salt option has been deprecated as of PHP 7.0.0. It is now preferred to simply use the salt that is generated by default.

....

Return Values

Returns the hashed password, or FALSE on failure.

The used algorithm, cost and salt are returned as part of the hash. Therefore, all information that's needed to verify the hash is included in it. This allows the password_verify() function to verify the hash without needing separate storage for the salt or algorithm information.

så saltet er includeret i hash stringen





du kan krypterer alle dine password i et hug

database før
Fold kodeboks ind/udKode 


med dette script.
nb må kun køres 1 og kun 1 gang

Fold kodeboks ind/udKode 


database efter
Fold kodeboks ind/udKode 


som du kan se har alle brugerne sammen password, men hvis du kunne i databasen efter ser det ikke ud som de har sammen password, årsagen er forskællig salt

nu kan en person der har / får adgang til databasen ikke se brugerne password :), nu kan du ikke sende brugeren hans nuværende password, hvis han skulle have glemt det, men skal lave et nyt password og sende til ham, og sådan bør det også være.

logon side
Fold kodeboks ind/udKode 



et andet sted du kan forbedre din sikkerhed er ved at bruge Prepare Statement, en mini guide er
www.computerworld.dk/uploads/eksperten-guider/1480-Prepared-Statements-under-MySQLI-kom-igang.pdf



Passer dette til det som er foreslået??


Jeg har lige prøvet at køre denne (bare lagt en side med koden ud og åbnet den), men der sker ikke nogen ændring af passwords i databasen - hvorfor ikke?
Fold kodeboks ind/udKode 








Indlæg senest redigeret d. 30.07.2017 10:11 af Bruger #17644
Passer dette til det som er foreslået??

skulle det gøre
men der sker ikke nogen ændring af passwords i databasen - hvorfor ikke?

hvilke fejl får du ??
får du en connection til den rigtige database ??
kan du ikke lave et dump af din bruger tabel ?? (behøver ikke nogle data, skal bare se structuren, hedder tabellen og felterne det som jeg forvendter ??)

det er grundlæggende dette jeg er interesseret i at se
Fold kodeboks ind/udKode 

du har sikkert flere felter i din structur


jeg har lige prøvet at kører hash scriptet på tabellen i database før og der bliver alle password hash'ed, og jeg kan logge ind med det opdaterede login script




Den kommer ikke med fejl, men vil bare ikke siden.
Hvordan er det jeg lavet et dump??
Har eksporteret til word og sendt en besked til dig

Update - nu har jeg fået ændret password.
Det var connection filen der lige skulle justeres fordi jeg har brugt andre "navne" end du har.

Hvordan laver jeg så min opret bruger side?




Indlæg senest redigeret d. 30.07.2017 12:36 af Bruger #17644
<< < 12 > >>
t