Säkerhet Föreläsning 6 Säkerhet Webbteknik II, 1DV449 Johan Leitet johan.leitet@lnu.se twitter.com/leitet facebook.com/leitet
F06 Säkerhet Dagens agenda HTTPS Autentisiering - Egen autentisiering - Lösenordshantering - HTTP Basic Auth - OpenID Auktorisering - OAuth - API-nycklar
Internet
HTTPS :80 Hallå Kalle! Läget???? :443 % SD 236! 3&"#4 6 " Hela HTTPmeddelandet krypteras
Symmetrisk kryptering "Ett hemligt meddelande" Kryptering Sessionsnyckel "SF%&## fgd)(=09643774" Dekryptering Sessionsnyckel "Ett hemligt meddelande"
Asymmetrisk kryptering "Ett hemligt meddelande" Kryptering Publik nyckel "LK/%ds135/ GNBGD" Dekryptering Privat nyckel "Ett hemligt meddelande"
Anrop, https, :443, random:# %RFDG HTTPS, flöde Certifikat med publik nyckel, random: # TFX1 Sessionsnyckel krypterad med publik nyckel Meddelande krypterat med sessionsnyckel Meddelande krypterat med sessionsnyckel...
HTTPS
Installation Driftsätta och administrera webbsajter: http://voyager.lnu.se/tekinet/kurser/dtt/1dv444/
Autentisering Auktorisering Fastställande av identitet Vilka resurser ska en fastställd identitet ha tillgång till?
Egen autentisiering? 1) Behöver du ha egen inlogging? Räcker det kanske med Facebook, Google, Twitter? Om du måste ha inlogging: 1) Tala om för användaren hur uppgifterna hanteras! 2) Tvinga inte användaren att utforma lösenordet på ett speciellt sätt, men informera gärna om vikten av ett starkt lösenord. (Man kan tänka sig minsta längd, typ 6 tecken.) 3) Tillåt specialtecken och lååååånga lösenord. 4) Var noggrann vid implementationen. Ditt lösenord
Lösenordshantering Om olyckan mot förmodan är framme. Ha ryggen fri. Se till att bara spara hashade lösenord. Individuellt saltade. Spara aldrig användarens lösenord så att detta går att återge.
Rainbow tables (ordböcker) Lösenord super123 996 hejsan 141 123456 118 Förekomst per 92084 111 hejhej 102 bajskorv 96 sommar 93 hemligt 69 blomma 60 bloggtoppen 60
Registrering Användaren registrerar lösenord (sommar) En slumpad salt skapas. Exempelvis: hj234klsd Hasha resultatet hj234klsdsommar Addera användarens lösenord till saltet. hj234klsdsommar 2d86c4246f3c0eb516628bf324d6b9a Spara hashen + saltet i databasen
Hur göra? Använd inte md5 för lösenordshantering! Använd ännu hellre hash("sha256", $salt.$_post["password"]) kräver dock extension till PHP.
Inloggning Användaren anger användarnamn och lösenord Slå upp salt som används för användaren Hasha resultatet Addera det lösenord användaren angav till saltet. Kontrollera om resultatet är samma som det som står i databasen
Gör världen lite säkrare " Kära webbplatsägare Nyligen registrerade jag ett konto på er tjänst. Det verkar dock inte bättre än att ni sparat mitt lösenord i klartext vilket gör att dessa uppgifter kan komma på vift om någon illasinnad hittar en säkerhetslucka i ert system. Att spara lösenord på detta sätt bryter i alla avseende mot god sed och det är definitivt något ni bör se över så fort som möjligt. Om du som läser detta mail inte har direkt insyn i hur systemet är utvecklat så vänligen vidarebefordra detta mail till de som har denna insyn. Vänliga hälsningar / Ellen Nu
Skydda dig själv Använd aldrig samma lösenord på mer än en sajt! Se över säkerheten på viktiga sajter så som Google, Facebook etc. Använd tvåstegsautentiseringar.
Basic Authentication DELETE /producer/34/position HTTP/1.1 Host: api.matmarknad.se Authorization: Basic Kl52GFDS%DH6H12JD#543
OpenID
Inloggad Inte inloggad?
Implementera OpenID http://wiki.openid.net/w/page/12995176/libraries
Autentisering Auktorisering Fastställande av identitet Vilka resurser ska en fastställd identitet ha tillgång till?
Auktorisering 1) Låt användaren mata sina uppgifter till tredjepartstjänsten i din applikation. Du kan sedan spara dessa. 2) Låt användaren skapa applikationsspecifika lösenord i tredjepartsapplikationen som användaren sedan kan dela ut till din applikation. 3) Använd ett tokenbaserat auktoriseringssystem. (OAuth)
Google AuthSub Yahoo BBAuth Flickr API OAuth
Ellen ska visa upp sina foton Bildtjänsten Ellen Vår tjänst
Flödet Resourse Owner Server Client
Förarbetet Server Client Client developer
Initieringen Ge tillgång Resourse Owner Server Client
Autentiseringen Ge tillgång Resourse Owner Server Client
Autentiseringen Redirect Ge tillgång Resourse Owner Server Client
Autentiseringen Login Ellen ****** Resourse Owner Server Client
Auktoriseringen Ge Client? Resurser OK Resourse Owner Server Client
Auktoriseringen Redirect Resourse Owner Server Client
Resursefterfrågan Vänta... Resourse Owner Server Client
Resurstillgång Vänta... Resourse Owner Server Client
Success!!! Resourse Owner Server Client
Autentisering på ditt API Ingen autentisering alls, read only API-nycklar Basic Auth Spara användarnamn och lösenord och be applikationen verifiera varje request med varje anrop över HTTPS Token-baserat autentisieringssystem/auktoriseringssystem (OAuth 2.0)
API-nycklar API Applikation 89748e4b686e4851cc3b08e UUID:
"Min slutsats är dock att de token-baserade tillvägagångssätten till högsta grad säkerställer användaren via, och tack vare, dess kommunikation som bryter mot Fielding's kriterier fo r statelessness i RESTful hantering. Min slutsats är vidare dock att kravet på autentisering via tredje part skapar en problematik för plattformsoberoende RESTful API:er - där kommunikation förutsättningslöst måste kunna bestå mellan två direkta parter." Tobias Åström 2011 "Statelessness erases every trace of security"
SQL injecetions
SQL injections select * from users where username= INMATAT VÄRDE select * from users where username= ; drop table users; Hur undvika? 1) Använd inte inline-sql. Använd istället: Lagrade procedurer Parametriserade frågor 2) Om du måste använda inline-sql. Validera, validera, validera