När man gör ett system där flera användare ska kunna logga in är det vanligt att man lagrar deras lösenord i databasen. Det kan se ut ungefär så här: SELECT id, username, password FROM users; +---+---------+---------+ |id |username |password | +---+---------+---------+ |1 |homer |abc123 | |2 |superman |Kent | |3 |batman |adamwest | |4 |indiana |jones | |5 |macgyver |#d¤5L9§9 | +---+---------+---------+ Problemet med att hantera lösenord så här är att det händer att obehöriga kan få tag i vår databas som ligger lagrade i klartext vilket är väldigt allvarligt. Se t.ex: http://www.idg.se/2.1085/1.140298 "Efterfesten.com hackades - hundratusentals lösenord i spridning" Så för att lagra lösenord måste vi undvika att lagra lösenord i klartext och detta kan vi åstadkomma genom att använda en haschfunktion. Om vi antar att vi använder hash-funktionen MD5 blir md5-summan för följande text detta:
hash-funktioner har den egenskap att det inte går räkna ut vilken text som matades in för att skapa haschsumman. Det har givetvis skapats register på vilka enklare stängkombinationer som motsvarar vilken summa. Testa göra en googlesökning på e99a18c428cb38d5f260853678922e03 och du kommer genast se att det är väldigt välkänt att detta är just abc123. Så detta är inget direkt skydd utan något som fördröjer tiden det tar att kunna använda lösenorden som den elaka personen har fått tag på. Detta hände bland annat 2008 med bilddagbokens användardatabas (http://www.idg.se/2.1085/1.139967). md5 är givetvis inte den enda haschfunktionen (för en lite mer detaljerad lista se: http://en.wikipedia.org/wiki/Cryptographic_hash_function#List_of_cryptographic_hash_functions) Vi kommer i fortsättningen dra Så för att göra det ännu svårare för de som har fått tag på lösenordet kan man använda sig av ett salt före man kör lösenordet genom en haschfunktion. Man brukar där definiera en unik sträng för din sida som skickas med in i funktionen: lösenordhasch = haschfunktion(lösenordiklartext + salt) På det viset så kommer alla lagrade lösenordshasch bli unika för just din databas. Vi kan dock göra ännu ett tillägg för att se till att försvåra genom att lägga till data som är konstant för varje post i användartabellen. lösenordhasch = haschfunktion(lösenordiklartext + salt +användarid) |
Databashantering > php >