dbwebb-se / webtec

Course repo for web technologies - webtec.
Other
12 stars 7 forks source link

Frågor och svar om password_hash och password_verify #20

Open mosbth opened 2 years ago

mosbth commented 2 years ago

Här följer frågor och svar kring lösenordshanteringen i PHP. Följande dialog är mellan två studenter i chatten.

testar att hasha ett lösenord med password_hash("test", PASSWORD_DEFAULT). kör jag echo på det så får jag en viss hashsträng, trycker jag F5 får jag en annan hashsträng. så ska det väl inte vara, eller tänker jag fel?

Värdet hashas tillsammans med ett slumpmässigt s.k. salt för att förhindra att en angripare kan identifiera lösenorden genom att i förväg beräkna hasharna för de vanligaste lösenorden. Se dokumentationen: https://www.php.net/manual/en/function.password-hash.php

mhmm jag förstår, tack! tänkte att jag kunde jämföra $hashatLösenordFrånAnvändare === $sparadHashDatabas, men man är tvungen att använda password_verify() för det. så password_verify måste ju på något sätt avsalta och sedan jämföra hasharna. och de hashar som kom med för testanvändarna i databasen måste ju vara avsaltade också va?

Det stämmer huvudsakligen som du tänkt, men det kompliceras lite av att saltet måste hanteras, vilket är anledningen till att de snällt nog ger oss password_verify. Värdet som lagras i databasen är inte bara hashen utan också saltet (och några andra saker). Man verifierar genom att jämföra hasharna, som du tänkt, men man måste ta det ursprungliga saltet ur databasen och använda det i hashningen för att få samma värde. (Plus andra komplikationer som man inte vill implementera själv och riskera att få fel.)

det här känns som en sak jag bara får acceptera, men förstår inte hur det salt som använts för att hasha lösenorden i databasen kan inkluderas i en 60 tecken lång hash och sen på något automagiskt sätt identifieras av password_verify för att avsalta utan att en angripare med enkelhet också kan göra exakt samma sak. den här apan tänker nöja sig med att password_hash och password_verify existerar och fungerar för ikväll hehe

Hanteringen av hashningen försöker undvika problem som innebär att ett lösenord alltid genererar en specifik hash. Lite som i rainbow tables.