«

»

Passordtryggleik for vevutviklarar

Merknad: Dette innlegget er fleire år gammalt. Informasjonen kan vere utdatert og eg kan ha endra syn sidan då.

Du har sikkert høyrt det ørten gonger før, passordtryggleik. Om korleis du vel eit godt passord (di lengre di betre, og helst med både store og små bokstavar, tal og andre teikn), og at du lyt velja eit nytt for kvar ny stad. Og eg er heilt sikker på at dei fleste som les dette ikkje følgjer desse råda. Ikkje alle. Kanskje du har eit langt og godt passord, men du nyttar det same overalt. Eller kanskje du har eit stutt og simpelt passord, men det er forskjellig frå stad til stad. Er du dum, har du eit stutt og simpelt passord som du nyttar alle stadar. Og er du komplett idiot, er dette passordet ganske enkelt «passord». Fint for deg, det har du sjølvsagt lov til å vera. Verre er det når passordet ditt vert handsama på komplett idiotisk måte.

Leksjon 1: Send ikkje passordet til brukaren

E-post er ein utrygg plattform, utvikla før både bosspost og virus eksisterte. Alt hender i klårtekst, og sjølv om det i dag finst mange mekanismar som skal verna om tryggleiken, er passordet i innboksen like trygt som eit pengebrev i ei ulåst postkasse. Sjølv ikkje når brukaren gløymer passordet sitt, skal dette sendast ut. Den einaste ålment godkjente måten, er å lata brukaren nullstilla passordet sitt:
1: Brukaren klikkar på Gløymt passord-knappen og skriv inn brukarnamnet sitt/e-postadressa si.
2: Skriptet sjekkar om denne brukaren finst, og sender ei nullstillingslenkje til den registrerte e-postadressa. Denne lenkja er berre gyldig i nokre minutt, og kan berre nyttast éin gong.
3: Brukaren loggar seg inn på e-postkontoen sin, og klikkar på den tilsendte lenkja.
4: Det opphavlege passordet vert fjerna, og brukaren får velja nytt passord.
Det finst òg variantar med løynlege spørsmål («Kva var jentenamnet til mora di?», «Kva heitte ditt fyrste kjæledyr?», «Kor mange fingrar har du?», osb), men sjølve passordet lyt aldri sendast til brukaren, korkje på e-post, prentast ut på vevsida eller blinkast i Flash med morsekode. Faktisk lyt ikkje registeret ha passordet i det store og heile.

Leksjon 2: Ikkje lagra passordet nokon stad

Det høyrast kanskje sjølvmotseiande ut, men det er fullstendig logisk. Skal du laga eit brukarregister, er det forventa at du ivaretek tryggleiken til brukarane på best mogleg vis. Det vil seia at du i tillegg til bossfilter og XSS-vern, sytar for at passordet ikkje kan hamna i feil hender. Trass ikkje om utenkjelege skulle henda, at ein datasnok skulle klara å bryta seg inn i registeret. Korleis gjer du dette? Enkelt. Du lagrar ein passorderstatning, ein kryptert utgåve. (Men som tidlegare påpeika av Odin, går dette berre ein veg. Du kan ikkje titta på den krypterte utgåva og rekna deg attende til passordet. Det er difor ikkje heilt korrekt å kalla det kryptering.)

Ein enkel måte er å nytta t.d. MD5-summen, som gjev ein streng på 32 alfanumeriske teikn, same kor langt passordet eigentleg er. Når brukaren registrerer seg, vil registreringsskriptet finna sjekksummen av det innskrivne passordet.

<?php
$passord = '12345'; // passordet til brukaren
$sjekksum = MD5($passord); // finn sjekksummen av passordet.
echo "$passord = $sjekksum"; // skriv ut
?>

Dette vil gje utskrifta: 12345 = 827ccb0eea8a706c4c34a16891f84e7b. Berre sjekksummen lagrast i databasen, ikkje sjølve passordet. Når brukaren loggar seg på, vil innloggingsskriptet finna sjekksummen av det innskrivne passordet, og sjå om det er den same sjekksummen som ligg i databasen:

<?php
$passord = '12345'; // passordet til brukaren
$sjekksum = MD5($passord); // finn sjekksummen av passordet.
$registrert_sjekksum = '827ccb0eea8a706c4c34a16891f84e7b'; // hent den registrerte sjekksummen
if( $sjekksum==$registrert_sjekksum )
// sjekk om sjekksummen av passordet er det same som ligg registrert
{
	echo "Passordet er rett"; // skriv ut viss rett
}else{
	echo "Passordet er feil"; // skriv ut viss feil
}
?>

Viss brukaren skriv inn feil passord, til dømes gløymer 5-talet, vil sjekksummen verta 81dc9bdb52d04dc20036dbd8313ed055, og sidan dette ikkje er det same som 827ccb0eea8a706c4c34a16891f84e7b, vil utskrifta verta: Passordet er feil. Ved rett passord vil sjekksummen vera 827ccb0eea8a706c4c34a16891f84e7b, som også er den registrerte – utskrifta vert: Passordet er rett.

Dette er sjølvsagt berre i grove trekk. I røynda vil vevutviklarane m.a. leggja til eit salt, og kanskje nytta SHA-1 eller noko anna i staden for MD5. Det vesentlege her er same kva at passordet ikkje vert lagra i klårtekst, og heller ikkje sendast til brukaren. Dette er noko med det fyrste du lærer deg som vevutviklar når du byrjar med innloggingsskript. Det er skammeleg å sjå at det finst såkalla profesjonelle nettstader utan desse grunnleggjande kunnskapane.

Kvifor bablar eg om dette?

I løpet av dei neste månadane kjem eg til å mista eit par e-postkontoar, og difor har eg den seinaste tida drive å logga meg på hjå dei ymse nettbutikkane og vevstadene eg er registrert (og det er skremmande mange!) for å endra e-postadressa. Eg har sjølvsagt gløymt passordet til mange av desse stadene, og har vore flittig til å nytta «Gløymt passord»-knappen. Dei fleste av dei eg er aktivt innom er flinke, og det er kjekt, men det finst eit par syndebukkar som er litt mindre flinke. Eit døme er Tech Nutrition. Då eg oppdaga kor tragisk passordtryggleiken deira er, sendte eg eit kvast brev til dei der eg påpeikte den slappe haldninga til tryggleiken og kravde å få kontoen min sletta. Eg datt nesten av stolen då eg fekk svar frå dei:

Vi har den beste sikkerhetsgodkjenningen som det er mulig å få for en nettbutikk. Det er også helt vanlig at nettbutikker sender ut passord pr epost etter at man er registrert. Kortnummer/sensitive opplysninger blir selvfølgelig ikke lagret hos oss. I dette tilfellet er et verste som kan skje at noen bestiller i ditt navn og slike tilfeller vil i så fall bli rettet opp i.

Jeg sletter som du ønsker din kundeprofil hos oss. Du har selvfølgelig mulighet til å registrere deg på nytt igjen.

Vi er svært opptatt av trygghet på siden vår.

Eg gjentek: «den beste sikkerhetsgodkjenningen», «helt vanlig at nettbutikker sender ut passord pr epost», «svært opptatt av trygghet». For å seia det på godt bokmål: BULLSHIT!

1 comment

  1. Kristoffer Egil Bonarjee

    Ny regel: Bruk et trivielt passord idet du registrerer deg på eit nytt sted. Sendar dei deg passordet i klartekst, så bør du ikkje bytta det til eit langt og godt.

Gje innspel