Avatar billede tblaster Nybegynder
20. august 2003 - 09:19 Der 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.
Avatar billede eagleeye Praktikant
20. august 2003 - 09:25 #1
Tag et kig på denne side:  Sikker omgang med adgangskoder

http://activedeveloper.dk/aspdigital/2003240401.asp
Avatar billede -thomas- Nybegynder
20. august 2003 - 09:26 #2
Hvis bruger navn og kode skal være krypteret mellem brugerens pc og serveren, kan du bruge en SSL kryptering.
Avatar billede tblaster Nybegynder
20. august 2003 - 09:27 #3
brugernavn behøves ikke at være krypteret ...

Hvordan virker en SSL kryptering?
Avatar billede -thomas- Nybegynder
20. august 2003 - 09:27 #4
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.
Avatar billede -thomas- Nybegynder
20. august 2003 - 09:29 #5
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.
Avatar billede -thomas- Nybegynder
20. august 2003 - 09:31 #6
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.
Avatar billede tblaster Nybegynder
20. august 2003 - 09:31 #7
Nåh det ... det er lige en omgang for meget ... så langt skal jeg heller ikke gå ...

Eagleeye ... jeg læser lige den artikel igennem og ser om det er noget jeg kan bruge!
Avatar billede -thomas- Nybegynder
20. august 2003 - 09:34 #8
Du kan også læse lidt om sql-injection her: http://activedeveloper.dk/aspdigital/2002053001.asp
Avatar billede eagleeye Praktikant
20. august 2003 - 09:43 #9
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.
Avatar billede tblaster Nybegynder
20. august 2003 - 10:12 #10
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.
Avatar billede -thomas- Nybegynder
20. august 2003 - 10:18 #11
Hvad mener du? Koden skal da ikke afkrypteres - det kan man ikke med en md5-kryptering. Den skal jo netop ligge krypteret i databasen.
Avatar billede eagleeye Praktikant
20. august 2003 - 10:19 #12
Du kan jo smide det md5 kryperet i databasen.
Og hvade en nøgle på din ASP side, så ASP kak krytere og dekryptere md5 koden fra databasen.
Avatar billede tblaster Nybegynder
20. august 2003 - 10:32 #13
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!
Avatar billede -thomas- Nybegynder
20. august 2003 - 10:37 #14
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.
Avatar billede eagleeye Praktikant
20. august 2003 - 10:38 #15
ny bruger og angiver kodeordet som:
Test
Så får jeg en SHA-1:
640ab2bae07bedc4c163f679a746f7ab7fb5d1fa

Din ASP kode dekryptere tilbage til: Test

Din kode kryptere med en nøgle: "dhfh73DamnD.dnbfj3"

pass = encrypt("Test," nøgle)
og gemmer det i db'en.
Avatar billede eagleeye Praktikant
20. august 2003 - 10:39 #16
Det kræver så du vælger en nøgle som du så altid skal bruge til at krytere password med.
Avatar billede tblaster Nybegynder
20. august 2003 - 10:45 #17
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?
Avatar billede eagleeye Praktikant
20. august 2003 - 10:52 #18
Ja det var tanken. Det skulle kunne lade sig gøre.
Det kan vel gøre med de samme kryptering funktioer, som du får SHA koden med.
Avatar billede tblaster Nybegynder
20. august 2003 - 11:06 #19
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?
Avatar billede tblaster Nybegynder
20. august 2003 - 11:40 #20
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:

<script language="javascript" type="text/javascript" src="sha-1.js"></script>
<script language="javascript" type="text/javascript">

function handleLogin (loginForm) {

var inputTimestamp = loginForm.timestamp.value;
var inputPassword = loginForm.password.value

loginForm.password.value = hex_sha1(inputTimestamp + inputPassword);

return true;
}
</script>
Avatar billede -thomas- Nybegynder
20. august 2003 - 11:42 #21
nej, det tror jeg ikke det er. måske kan du prøve at placere .js-filen i en mappe, der ikke er tilgængelig for andre. ved ikke om man kan det.
Avatar billede tblaster Nybegynder
20. august 2003 - 12:00 #22
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

loginForm.password.value = hex_sha1(inputTimestamp + inputPassword);

return true;
}
</script>

<FORM METHOD="POST" ACTION="Vis.asp?Funktion=Login&Mode=Validate" onsubmit="return handleLogin(this);">
<input type="hidden" name="timestamp" value="<% Response.Write (DateDiff("s", "01-01-1950", now)) %>">
<p align="center">Brugernavn<br>           
<input type="text" name="brugernavn" size="40" value="<%=request.cookies("Login")("Brugernavn")%>"><br><br>
Adgangskode<br>
<input type="password" name="password" size="40" value="<%=request.cookies("Login")("Password")%>"><br><br>
<INPUT TYPE=Checkbox name="Save"> Husk mine oplysninger&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br>
<INPUT TYPE=Checkbox name="Auto"> Log mig automatisk på fremover<br><br>
<input type="submit" NAME="submit" value="Login"></form>

Når jeg trykker på login så bliver mit password fint ændret som det skal men jeg får ikke gemt noget i min cookie ... hvad kan jeg gøre?

Jeg vil jo undgå at sende den ikke krypteret kode til næste side så derfor vil jeg gerne have at kode bliver gemt i en cookie på den pågældende side.
Avatar billede -thomas- Nybegynder
20. august 2003 - 12:04 #23
Prøv med:

<INPUT TYPE=Checkbox name="Save" value="save">

og så

If request.form("Save") = "save"
Avatar billede tblaster Nybegynder
20. august 2003 - 12:24 #24
nope ... den gemmer det stadig ikke ...
Avatar billede -thomas- Nybegynder
20. august 2003 - 12:26 #25
loginForm.brugernavn.value skal jo også være Request.Form("brugernavn") osv.
Avatar billede tblaster Nybegynder
20. august 2003 - 12:33 #26
Det hjælper heller ikke ... følgende virker jo fint:

<script language="javascript" type="text/javascript" src="sha-1.js"></script>
<script language="javascript" type="text/javascript">

function handleLogin (loginForm) {

var inputTimestamp = loginForm.timestamp.value;
var inputPassword = loginForm.password.value

loginForm.password.value = hex_sha1(inputTimestamp + inputPassword);

return true;
}

</script>
Avatar billede -thomas- Nybegynder
20. august 2003 - 12:36 #27
Ja, men det er jo javascript, ikke asp.
Avatar billede tblaster Nybegynder
20. august 2003 - 12:37 #28
Hvordan skal det så stå i javascript? Jeg har prøvet med:

Cookies("Login")("Password") = inputPassword

Men det virker heller ikke.
Avatar billede -thomas- Nybegynder
20. august 2003 - 12:44 #29
Dette er asp, det andet var java script:

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
   
End If


Husk også at give din <form name="navn">.
Avatar billede -thomas- Nybegynder
20. august 2003 - 12:45 #30
altså:

<FORM NAME="loginForm" METHOD="POST" ACTION="Vis.asp?Funktion=Login&Mode=Validate" onsubmit="return handleLogin(this);">
Avatar billede tblaster Nybegynder
20. august 2003 - 12:50 #31
Kan jeg få overstående til at køre som javascript i stedet for? Jeg må vel med javascript kunne skrive til en cookie eller hva?
Avatar billede -thomas- Nybegynder
20. august 2003 - 12:55 #32
Du kan også skrive til en cookie med asp. Prøv dette i en tom fil:

<%
Response.Cookies("test") = "Dette er indholdet af en cookie"
Response.Write Request.Cookies("test")
%>
Avatar billede tblaster Nybegynder
20. august 2003 - 13:00 #33
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!
Avatar billede tblaster Nybegynder
21. august 2003 - 11:19 #34
Jeg har fået min cookie til at virke ... arbejder videre med tingne ... skal nok have noget mere hjælp når jeg skal til at kryptere koden!
Avatar billede tblaster Nybegynder
06. april 2004 - 08:21 #35
smid et svar thomas
Avatar billede -thomas- Nybegynder
12. april 2004 - 19:44 #36
Så gerne :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester