Avatar billede -kenner- Nybegynder
10. juli 2004 - 09:40 Der er 9 kommentarer og
3 løsninger

Beskyt side med Password

Hej jeg vil gerne beskytte en side med password så kun dem der har passwordet kan komme videre ind på siden.
Avatar billede meltinis Nybegynder
10. juli 2004 - 09:51 #1
Du skal benytte dig at session variabler... fx kan du i starten af alle de sider som du vil beskytte lave en kodestump som ser således ud:

'Login test
if session.Contents("login")<>1 then
    response.Redirect("login.asp")
end if

På login siden laver du en forbindelse til databasen hvor du kontrollerer brugerens navn og password og hvis det er rigtigt sætter du variablen login til 1
Avatar billede -kenner- Nybegynder
10. juli 2004 - 10:07 #2
Jeg vil gerne have det lavet så jeg kun skal skrive password.. og helst ikke referere til databasen..
Avatar billede meltinis Nybegynder
10. juli 2004 - 10:14 #3
Jeg er ikke helt med... vil du 'hardkode' nogle brugernavne og password - eller vil du kun have ét password?
Avatar billede -kenner- Nybegynder
10. juli 2004 - 10:30 #4
Kun et password..
Avatar billede meltinis Nybegynder
10. juli 2004 - 10:39 #5
OK... den sikre og på sigt mest overskuelige måde er at lave en login side (hvor bruger indtaster password) og en side som tester om det er korrekt. Og derudover skal du så have den ovennævnte kode på de sider du ønsker beskyttet...

login.asp:
<form action="login_exe.asp" method="post">
Indtast password:<br>
<input type="text" name="pass">
<input type="submit" value="Send">
</form>

login_exe.asp:
<%
if request.Form("pass") = "DitØnskedePassword" then
  session.Contents("login")=1
  response.Redirect("DinStartSide")'sender bruger ind på sitet
else
  response.Redirect("login.asp")'sender bruger tilbage til loginsiden
end if
%>
Avatar billede phineas_phreak Nybegynder
10. juli 2004 - 13:52 #6
Følgende er lidt længere, men det er det jeg bruger.

Du laver en side som du f.eks. kalder admin_login.asp:

<%
Response.Buffer = True

Function ValidateLogin( sId, sPwd )
    ValidateLogin = False

    If sId = "admin" AND sPwd="admin" Then
        ValidateLogin = True
    End If
End Function

Dim sText, fBack

fBack = False
If Request.Form("dologin") = "yes" Then
    'Try to login
    If ValidateLogin( Request.Form("id"),Request.Form("pwd") ) = True Then
        fBack = True
        Session("logonid") = Request.Form("id")
    Else
        sText = "Forkert password eller brugernavn"
    End If
Else
    'We are not trying to login...
    If Session("logonid") <> "" Then
        '
        fBack = True
        'We are logged in so lets go back to the file that included us 
    Else
        sText = "vær venlig at logge ind"
    End If
End If

If fBack = False Then %>

<html>
<head>
    <title>Login side</title>
</head>
<body>

<form method="POST" action="<%=sIncURL%>">
<input type="hidden" name="dologin" value="yes">

Brugernavn: <input name="id">
<br>
Password: <input type="password" name="pwd">
<br><br> 
<input type="submit" value="Login" name="B1">&nbsp;&nbsp;&nbsp;&nbsp;<input type="reset" value="Nulstil" name="B2">
</form>

<%   
Response.End
End If
%>
</body>
</html>


Denne side indeholder alle data der skal bruges for at generere passwordet samt formen til at indtaste.

Det eneste du gør er at bruge denne fil som en includet fil med metoden:

<!--#include file="admin_login.asp"-->

som du indsætter på alle de beskyttede dokumenter.

Når du kalder en beskyttet side skal du IKKE bruge admin_login.asp som startside, men netop en anden side hvor du har indsat <!--#include file="admin_login.asp"-->

Tricket er jo hvis du læser scriptet igennem at den redirecter dig hvis password og brugernavn er rigtigt.

Håber du kan bruge det til noget
Avatar billede buur Nybegynder
10. juli 2004 - 16:03 #7
Hvordan opretter man så brugernavn osv.?
Er ikke den store haj til ASP, men kunne godt tænke mig at låne den her kode. -Hvis det da er i orden?
mvh. C.Buur
Avatar billede phineas_phreak Nybegynder
11. juli 2004 - 02:42 #8
med ovenstående script kan du ikke bruge flere brugere. Det er lavet så du logger ind med 1 brugernavn og 1 password. det ændres i følgende linje:

If sId = "admin" AND sPwd="admin" Then


Skal du have et flerbrugersystem hvor brugere f.eks. er skrevet op i en database bliver det lidt anderledes.

så kan det f.eks. se sådan ud (dette er et eksempel med en access database):

du laver først en side med navnet login.asp f.eks. som indeholder din form:

login.asp:

<form method="POST" action="validerlogin.asp">
<input type="hidden" name="dologin" value="yes">

Brugernavn: <input name="brugernavn">
<br>
Password: <input type="password" name="pwd">
<br><br> 
<input type="submit" value="Login">
</form>


så laver du en ny side der validerer din loginside som du kalder validerlogin.asp


validerlogin.asp:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
' Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("dindatabase.mdb")

username = request.form("username")
passsword = request.form("password")

SQLvalidate = "SELECT * FROM brugere WHERE brugernavn='" & (Username) & "' And Password='" & (Password) & "'"
Set rsSQLvalidate = conn.Execute(SQLvalidate)

If rsSQLvalidate.BOF Or rsSQLvalidate.EOF Then
    Response.Redirect "login.asp"
Else
    Session("idUser") = rsSQLvalidate("idUser")
    Response.Redirect "nyside.asp"
End If
%>


for at sørge for at folk ikke vælter ind på din beskyttede side som er kaldt nyside.asp

er du nødt til at indsætte følgende i toppen af dit dokument, eller hvis du bruger flere filer der skal beskyttes lave en included fil der indehold session check:

dette ser sådan ud:

<%
If Session("idUser") = 0 Or _
  Session("idUser") = "" Then
    Response.Redirect "login.asp"
End If
%>


Håber du kan bruge det til noget
Avatar billede phineas_phreak Nybegynder
11. juli 2004 - 12:39 #9
og for at undgå SQL injection (http://www.eksperten.dk/artikler/95) er det en god ide at lave validering på input felterne således:

Username = Replace((trim(Request("username"))), "'", "")
Password = Replace((trim(Request("password"))), "'", "")
Avatar billede meltinis Nybegynder
11. juli 2004 - 14:39 #10
Hvis du blot sammenligner det password som ligger i resultset'et med det som du får fra formen så kan du ikke udføre nogen af SQL injections som er beskrevet i artiklen. Derfor er det normalt en bedre løsning.
Avatar billede -kenner- Nybegynder
22. juli 2004 - 10:08 #11
Der bliver pare en tom plads, der hvor jeg har sat <!--#include file="admin_login.asp"--> ind..
Avatar billede meltinis Nybegynder
24. juli 2004 - 18:27 #12
Det er sandsynligvis fordi du har indsat det inde i ASP koden (inden for '<%' og '%>'). Den skal være uden for ASP "tags'ene".
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