Beskyt sider i ASP

Tags:    asp
Skrevet af Bruger #473 @ 18.08.2002
Login eksempel


Introduktion:


Her skal vi se på hvordan vi kan beskytte sider, som du ikke ønsker andre skal kunne se.
Der er nok flere måder at gøre det her på, og koden kan udbygges på flere punkter.

Til dette eksempel bruger vi en database (MS Access).
Vi bruger ” C:\\Inetpub\\wwwroot” til web-stedets placering.

Dette lille eksempel skal ikke ses som et færdigt stykke kode.
Men det viser det grundlæggende til at sikrere sine sider med.



Databasen:


Vi starter med at oprette en database, som skal indeholde brugernavn og password.
Start Access, klik på ”Tom Access-database” og ”Ok”. Gem databasen som ”Users” (Filnavn) i ” C:\\Inetpub\\wwwroot”.

Double klik på ”Opret en tabel i designvisning”. I første ”Feltnavn” skriver du ”Id” (uden ””)
og i ”Datatype” vælger du ”Autonummerering”. Højre klik på den sorte pil i venstre side, og vælg ”Primær nøgle”.

Jeg vil ikke bruge Id’et i denne artikel, men det kunne være at der kom en endnu.

I ”Feltnavn” under ”Id”, skriver du ”Username” (uden ””) og i ”Datatype” vælger du ”Tekst”.

I ”Feltnavn” under ”Username”, skriver du ”Password” (uden ””) og i ”Datatype” vælger du ”Tekst”.

Tryk nu på ”Gem” og skriv ”Users” (uden ””) under ”Tabelnavn”. Tryk på ”Ok”.

Dit skærmbillede skulle gerne line det her:


Tryk nu på ”Visning” oppe til venstre for ”Gem” knappen. Under ”Username” skriver du ”admin” (uden ””).
Og under ”Password” skriver du ”demo”. Tryk nu på ”Gem”.

Vi har nu oprettet en database, og en bruger.


Html/Asp koden:

Vi starter med filen default.asp
<html>
<head>
<title>Ny side 1</title>
</head>
<body>

<% 
If Session("Login") <> True Then
	Response.Redirect "login.asp"
Else
	Response.Write "Du er nu logget ind!"
	Response.Write "<p><a href='logud.asp'>Logud</a></p>"
End If 
%>

</body>
</html>
Der er ikke så meget her. Hvis brugeren er logget ind, så skriv det.
Ellers omdiriger til "Login.asp".

Login.asp
1  <html>
2  <head>
3  <title>Ny side 1</title>
4  </head>
5  <body>
6
7  <%
8  Mode = Request("Mode")
9
10 If Mode = "" Then
11 %>
12
13 <form method="POST" action="login.asp?Mode=Login">
14 <input type="text" name="Username" size="20">: Brugernavn<br>
15 <input type="password" name="Password" size="20">: Password<br>
16 <input type="submit" value="Login" name="B1">
17 </form>
18
18 <% 
20 End If
21
22 If Mode = "Login" Then
23
24 	Dim Username, Password
25
26	Username = Request.Form("Username")
27	Password = Request.Form("Password")
28
29	If Len(Username) > 0 Then
30		Username = Replace(Username, "'", "''")
31	End if
32	If Len(Password) > 0 Then
33		Password = Replace(Password , "'", "''")
34	End if
35
36	Conn = "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("Users.mdb") & ""
37	Set myConn = Server.CreateObject("ADODB.Connection")
38
39	myConn.Open Conn
40
41	Set RS = myConn.Execute ("SELECT * FROM Users WHERE Username='" & Username & "' AND Password='" & Password & "'")
42
43	If RS.EOF Then
44		Response.Write "Forkert brugernavn eller password!"
45		Response.Write "<p><a href='login.asp'>Login</a></p>"
46		Response.Write "<p><a href='default.asp'>Forside</a></p>"
47	Else
48		Session("Login") = True
49		Response.Redirect "sikkerside.asp"
50	End If
51
52	RS.Close
53	Set RS = Nothing
54	myConn.Close
55	Set myConn = Nothing
56
57  End If
58  %>
59
60 </body>
61 </html>
Linie 8 : Er "Mode" sat?
Linie 10: Hvis "Mode" ikke er sat, så hvis login form.
Linie 22: Hvis "Mode" er "Login" (bruger har trykket på login).
Linie 26-27: Find "Username" og "Password".
Linie 29-34: Sikkerhed se: http://activedeveloper.dk/aspdigital/2002053001.asp.
Linie 36-39: Åben databasen.
Linie 41: Søg efter brugeren i databasen.
Linie 43-50: Hvis brugeren findes, så set "Session("Login") til "True" og gå til "sikkerside.asp".
                    Ellers gå til login.asp igen.
Linie 52-55: Luk databasen.

Logud.asp
<html>
<head>
<title>Ny side 1</title>
</head>
<body>

<%
Session("Login") = False
Response.Redirect "default.asp"
%>

</body>
</html>
</pre>
Set "Session("Login")" til "False" og vidresend til "default.asp", som vidresender til "login.asp" da vi ikke er logget ind.<br>
<br>
<b>Sikkerside.asp</b><br>
<pre>
<html>
<head>
<title>Forside</title>
</head>
<body>

<%
If Session("Login") = True Then
%>
Dette er en beskyttet side!
<p><a href="default.asp">Forside</a></p>
<p><a href="logud.asp">Logud</a></p>
<%
Else
%>
Du er ikke logget ind!
<p><a href="login.asp">Login</a></p>
<%
End If%>
</body>
</html>
Hvis bruger er logget ind, så vis det "hemmelige".
Ellers afvis, og giv et link til login.asp

De sidste ”Kloge” ord:

Ja der er vel ikke så meget at sige, udover at jeg håber at i kan bruge artiklen til noget.
Er der nogle der skulle have nogle spørgsmål, så er i velkommen til at kontakte mig.

Koden og database kan hentes her



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (8)

User
Bruger #3447 @ 02.03.03 16:41
Lige det jeg skulle vide... Simpelt, og til at forstå!
User
Bruger #2649 @ 09.03.03 19:44
Hvordan kan det værre du har flere body`er og du har HTML kode stående ude fra en <HTML></html> tag?
User
Bruger #473 @ 12.03.03 20:09
Det er en fejl i artikkel systemet, har prøvet at få KasperTSW til at rette det, uden held.

Det der står i mellem </pre> og <pre> er min kommentar, ikke kode.
User
Bruger #3447 @ 23.03.03 10:02
Dit link til koden og databsen virker forresten ikke...
User
Bruger #473 @ 01.04.03 17:33
Nyt link:
http://www.web-tech.dk/login.zip
User
Bruger #2397 @ 11.07.03 20:58
Det skal lige nævnes at man skal have sat Response.Buffer = True for, at få ovenstående ASP script til at virke...

Det skyldtes at Response.Redirect sender en HTTP header til brugerens browser, hvori den informerer browseren om den nye side som skal vises i stedet... Dette fungerer ikke hvis man allerede har sendt 1 eneste tegn til browseren, idet man så ikke kan sende en header... Derfor skal man enten aktivere "buffering" eller sikre sig, at Response.Redirect kommer før et eneste tegn af selve html dokumentet.
User
Bruger #4509 @ 26.09.03 13:11
Prøv lige at kaste et blik på denne artikel: http://activedeveloper.dk/aspdigital/2002053001.asp. Den tager fat i en ret vigtig, men desværre ofte overset ting i forbindelse med login sider.
User
Bruger #4509 @ 26.09.03 13:12
Undskyld. JEg var lige hurtig nok. Jeg havde overset linje 29 - 34. *S*
Du skal være logget ind for at skrive en kommentar.
t