20. august 2003 - 09:19Der er
34 kommentarer og 2 løsninger
Sikker login system til asp
Hejsa
Nu har jeg snart søgt hele nettet rundt for at finde et login system med en go sikkerhed, men kan ikke finde noget. Derfor har jeg brug for lidt hjælp.
Det skal være sådan at når en bruger logger på, så sendes hans oplysninger krypteret til serveren hvor de sammenlignes med værdierne i en database. Tanken er at alle koderne i databasen er krypteret så man ikke bare kan åbne databasen og læse koderne.
Det skulle jo så gerne være sådan at hvis der er en der opsnapper den krypteret værdi der bliver sendt til serveren, så kan han ikke bruge den til noget da han skal dekryptere koden hvilket gerne skulle være umulig eller tage lang tid.
Hvad er der af muligheder, findes der noget der kan gøre det jeg efterspørger, hvilken kryptering skal jeg bruge og hvordan skal den sættes op?
Til orientering køre jeg med en MS SQL Server. Ved ikke om det er til nogen hjælp men måske den indeholder en krypterings eller password funktion som jeg kan bruge.
Men hvis det er nok, at det ligger krypteret i databasen, bruger du bare en md5-kryptering. Dvs. du krypterer det indtastede og tjekker om det er det samme som i databasen.
En SSL kryptering virker ved, at du får installeret et SSL certifikat på serveren. Det kan enten være et du selv køber, eller et du får udstedet hos en firma. Herefter kan du bruge https:// foran din webadresse og alt hvad der overføres mellem brugeren og serveren, vil være krypteret (som regel med 128-bit). Det koster dog en del at få udstedet et certifikat som dette hos fx. Eurotrust.
Men medmindre din database indeholder meget fortrolige/følsomme oplysninger, er der ingen grund til at bruge SSL. Du kan få en rimelig sikkerhed ved alene at bruge ASP med en MD5-kryptering.
Jeg har prøvet den og den virker fint og er let at gå til. Der hvor der står MXX skal rettes til det man bruger eksvis md5 skal m'et være et lille m man kan ikke skrive Md5 da javascript funtionerne er med små bogstaver.
Nu har jeg læst det igennem men har et problem som de andre også snakker om i diskussionen.
Når nu en ny bruger skal oprettes eller ændre sin kode, hvordan får man så på en sikker måde overført koden til databasen? Koden skal jo md5 hashes og derefter på en eller anden måde krypteres så folk der fanger værdien ikke kan bruge den til noget. På serveren skal den modtaget værdi så afkrypteres hvorefter den kan lagres i databasen. Men hvordan kan dette gøres?
Kan man i asp kryptere en værdi med en 128 bit kryptering og så dekryptere værdien igen når man kender krypterings algoritmen? Eller kan man på en anden måde overføre værdien på en sikker måde.
Metoden skal helst ikke have noget med SSL kryptering at gøre. Det skal være så systemet kan benyttes på en almindelig server med asp understøttelse.
Jeg tror i misforstod mig ... hvis jeg nu vælger at oprette en ny bruger og angiver kodeordet som: Test Så får jeg en SHA-1: 640ab2bae07bedc4c163f679a746f7ab7fb5d1fa
Det er altså overstående værdi som skal gemmes i databasen. Men problemet er jo at hvis jeg bare vælger at sende overstående til serveren så kan en 3-part gå ind fange SHA-1 værdien hvilket jo bliver den værdi som ligger i databasen og derved kan han med lidt smilde logge ind på siden.
Det jeg gerne vil er altså at denne værdi: 640ab2bae07bedc4c163f679a746f7ab7fb5d1fa krypteres og sendes til serveren som så afkryptere værdien og lagre den i databasen. Hvis en person så opsnapper koden skal han jo vide hvilken dekrypterings form han skal bruge samt hvilke krypteringsværdier. Dermed er han sat på en størrere opgave inden han kan få noget ud af koden!
Ja, md5 beskytter netop IKKE mod, at folk opsnapper password mellem bruger og server, men mod at folk opsnapper password, hvis de får adgang til databasen.
Min asp kode kan jo ikke dekryptere 640ab2bae07bedc4c163f679a746f7ab7fb5d1fa ... den skal kryptere værdien og sende det til serveren som så dekryptere den.
Kan jeg gøre følgende: SHA = 640ab2bae07bedc4c163f679a746f7ab7fb5d1fa nøgle = dhfh73DamnD.dnbfj3 pass = encrypt(SHA, nøgle)
Og så sende det til serveren som så gør følgende: Passe = Den encrypteret værdi der er sendt til serveren nøgle = dhfh73DamnD.dnbfj3 SHA = decrypt(Pass, nøgle)
Og så ende med at få en SHA der er lig med den SHA jeg havde på første side? Kan man vha overstående dektryptere og enkryptere eller hvordan skal det gøres?
med hvilken type sikkerhed bliver min tekst krypteret når jeg bare bruger encrypt? Og min nøgle, kan jeg vælge den frit som jeg vil eller skal den opbygges på en speciel måde?
Nu er jeg ved at sætte login systemet op for at se om det virker. Er det muligt at gemme følgende, så hvis man vælger at se source kode så kan man ikke se dette:
Det var en idee ... det vil jeg overveje. Hvad er der galt her:
function handleLogin (loginForm) {
<%
If request.form("Save") = "on" then Response.Cookies("Login")("Brugernavn") = loginForm.brugernavn.value Response.Cookies("Login")("Password") = loginForm.password.value Response.Cookies("Login").expires = Date+365 'Information gemmes i cookie i et år Else Response.Cookies("Login").expires = Date-1000 'Information slettes ved at sætte "expires" 1000 dage tilbage
End If
%>
var inputTimestamp = loginForm.timestamp.value; var inputPassword = loginForm.password.value
If request.form("Save") = "save" then Response.Cookies("Login")("Brugernavn") = Request.Form("brugernavn") Response.Cookies("Login")("Password") = Request.Form("password") Response.Cookies("Login").expires = Date+365 'Information gemmes i cookie i et år Else Response.Cookies("Login").expires = Date-1000 'Information slettes ved at sætte "expires" 1000 dage tilbage
Ja det har jeg prøvet og det virker fint ... det var jo derfor at jeg til at starte med bare prøvede at smide asp ind i javascript. Mit problem er at få en værdi skrevet ind i min cookie via javascript. Den skal indskrives når funktionen handleLogin udføres!
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.