Labb3
- Inlämningsdatum Inget inlämningsdatum
- Poäng 4
Inloggningssekvens med databas
Basuppgift
Översikt
I den här labben ska du skapa en webbserver med Node.js samt en simpel webbsida, där nya användare kan registrera sig för att skapa ett konto samt registrerade användare kan logga in på sina egna konton. Webbsidan ska bestå av en inloggnings-/registreringssida samt en profilsida för lyckade inloggningar. Ni kommer att förses med simpla kopior av båda dessa sidor som en del av labbskelettet.
I följande sida finns en demo på basuppgiften skrivet i PHP men programmet fungerar exakt som det förväntas av er fast i Nodejs och inte PHP.
Illustrera applikationens beteende när det gäller "gardering of endpoints" genom att klicka på följande länkar till end-points:
- När du INTE ÄR INLOGGAD:
- När du ÄR INLOGGAD:
- Inloggnings sidan: https://course-dd1386.eecs.kth.se/~vahid/intnetLabbar/lab3/index.php
- Registrerings sidan: https://course-dd1386.eecs.kth.se/~vahid/intnetLabbar/lab3/registration.php
Labbskelett
Labbskelettet består bland annat av dessa filer:
README.md
Den här filen förväntas ni läsa då den innehåller information om hur du får skelettet att köra.package.json
Den här filen berättar förnpm
att mappen innehåller ett javascript project, vilka beroenden projektet har, samt hur projektet startas.src/base/index.js
Den här filen är webbserverns ingångspunkt och kommer att vara den fil som körs först.public/
Den här mappen innehåller de statiska filer som kommer att serveras avserver.js
.
Specifika krav
- Filer (
/public
mappen)- Ni skall använda filerna i public mappen för login samt profilsidorna.
- Filerna i public får INTE ändras.
- Lintning.
- Ni skall använda de medföljande lint-skripten (package.json filen) utan modifikation. Vid redovisning ska dessa kunna köras UTAN NÅGRA VARNINGAR ELLER FEL.
- Databas.
- Databasen SQLite skall användas. Skelettet kommer med ett exempel skrivet i
sqlite
Links to an external site. som använder prepared statements. Se till att ni förstår exemplet innan ni går vidare. - Alla queries skall vara säkra mot SQL injections.
- Alla registrerade användare skall sparas i databasen.
- Inloggning skall enbart tillåtas om det angivna användarnamnet och lösenordet som finns registrerat i databasen.
- Registrering av ett upptaget användarnamn skall inte vara tillåtet.
- Användarnamn samt lösenord måste vara minst 3 tecken långa samt innehålla minst en bokstav och en siffra.
- Databasen SQLite skall användas. Skelettet kommer med ett exempel skrivet i
- Registrering.
- Vid lyckad registrering ska användaren bli inloggad och hamna på profilsidan.
- Vid misslyckad registrergin t.ex p.g.a. att användarnamnet är redan taget, visas registreringssidan med ett felmeddelande. I felmeddelandet ska det stå det användarnamnet som hade använts för det misslyckade registreringen, precis som demo.
- Om lösenordet inte matchar med bekräftelse lösenordet så ska detta meddelas som
- Inloggning.
- Vid lyckad inloggning:
- Inloggningssession skall skapas och associerad kaka skall skickas till användaren. Redan inloggade användare ska hamna på profilsidan oavsett handling (t.ex uppdatering av sidan ändra url till login-sidan etc) med undantag för utloggning se punkt 6.3.2 nedan.
- Användaren skall bli omderigerad till dess profilsidan.
- Vid misslyckad inloggning:
- Användaren skall bli omderigerad till inloggningssidan igen, fast med ett felmeddelande.
- Vid lyckad inloggning:
- Utloggning.
- Det skall finnas en utloggningsknapp på profilsidan.
- Utloggning skall enbart tillåtas för inloggad användare.
- Vid lyckad utloggning:
- Inloggningssessionen skall tas bort, samt assosierad kaka skall invalideras.
- Användaren skall bli omdirigerad till inloggningssidan.
- Säkerhet.
- Det skall finnas ett middelware Links to an external site. på serversidan som hindrar ej inloggade användare från att få tillgång till profilsidan genom att försöka skriva url:en till profilsidan i webbläsarens adressfält och omdirigerar användaren till inloggningssidan.
- Inloggade användare som skriver url:en till inloggningssidan eller registreringssdian hamnar automatiskt i profilsidan.
Referenser
Node.js: https://nodejs.org/en/ Links to an external site.
Express.js: https://expressjs.com/ Links to an external site.
SQLite: https://www.npmjs.com/package/sqlite Links to an external site.
Bonusuppgift 3X
Alla krav i basuppgiften samt samtliga följande krav måste uppfyllas:
- SLO (Single Logout)
Förutom utloggnings-knappen från grunduppgiften på profilsidan ska det finnas även en länk för att logga ut ALLA ANDRA aktiva sessioner associerade med samma konto (t.ex sessioner som finns kvar när man loggade in från andra datorer/webbläsare och glömt logga ut). Det vill säga profilsida som tillhör den absolut första sessionen ska inte att ha en sådant länk som kan logga ut alla andra. Men de senare sessionerna ska ha en länk på profilsidan som via länken kan logga ut alla andra men inte sig själv. Länken ska försvinna UTAN ATT HELA profilsidan uppdateras, detta är möjligt med AJAX-teknik. (genomgång av AJAX kommer att finnas på föreläsningarna) - Passive sessionsinvalidering
- Inloggnings-sessionen skall invalideras automatiskt efter en viss tid från senaste interaktion med servern. Senaste instruktion kan t.ex vara när man uppdaterar profilsidan med hjälp av webbläsarens refresh-knapp. (ni får välja tiden, förslagsvis 10 sekunder, för att underlätta redovisning av labben).
- Efter invalideringen ska den aktuella sidan (vilket i detta fall ska vara profilsidan) automatisk och utan användarens inverkan omdirigeras till inloggnings-sidan.
- Säkerhet.
- Lösenorden som lagras i databasen skall Hash:as sam saltas med BCrypt. Links to an external site.Dvs lösenord får inte lagras i klartext.
- Var redo på att besvara frågor gällande varför hash:ning och saltning är nödvändigt för lösenordssäkerhet.
Matris
Kriterier | Bedömningar | Poäng |
---|---|---|
Description of criterion
tröskel:
poäng
|
poäng
--
|