Förmiddagen ägnades åt en kort repetition av HTTP Basic från igår och sen pratade vi om hur man kan validera lösenord utan att behöva lagra lösenorden i klartext i databasen.

Det är inte en fråga OM någon kommer att komma över er databas, utan NÄR, så oavsett hur säker ni tror att er kod/app är, så lagra ALDRIG lösenord i klartext!

Johan Nordström, 2020 😆

Kryptering hjälper inte heller. Referera till Tom Scott’s video om ”How NOT to Store Passwords!” längre ner.

Vi pratade om MD5 (som anses vara knäckt nu), SHA1 (som också är knäckt sedan 3 år tillbaka) och det rekommenderade SHA2 som finns i två varianter – SHA256 och SHA512.

En hash är en envägs-funktion som alltid skapar samma resultat ifrån en given input, så nackdelen med att lagra enbart en hash är att en hacker som kommer över er databas kan se att t.ex. användaren pelle och kalle uppenbarligen har samma lösenord då deras hash:es är identiska.

Detta kan man komma runt genom att använda sig av salt 🧂, som egentligen är en sträng av slumpgenererade tecken (olika för alla lösenord) som läggs på framför lösenordet i klartext innan det hash:as, vilket gör att hash:en av två lösenord som då har två olika salt:s blir omöjlig att se att det är samma lösenord på de två användarna.

bcrypt är en annan hash-algoritm och bibliotek som vi kan använda som sköter genereringen av salt och hash:ningen och även valideringen av en hash åt oss på ett väldigt smidigt sätt, och är den för tillfället rekommenderade lösningen att använda när man behöver hantera användarkonton i sin app (och inte använder en tredjeparts-leverantör för användar-autentisering, vilket kan vara både en bra och dålig idé – mer om detta vid ett annat tillfälle).


Videos

How NOT to Store Passwords!

Hashing Algorithms and Security

SHA: Secure Hashing Algorithm


Länkar

Wikipedia om Cryptographic hash functions

https://en.wikipedia.org/wiki/Cryptographic_hash_function

bcrypt

https://www.npmjs.com/package/bcrypt


Workshop

Se fil i repot på GitHub:

https://github.com/drblue/fed19-nodejs/blob/lesson-18/workshop-2020-05-15.md