Avatar billede rit Nybegynder
27. september 2003 - 14:57 Der er 62 kommentarer og
1 løsning

Password uden database

Kan man på en enkelt måde sikre et site med password med asp-kode?
Er koden ikke meget omfattende ville det være skønt med paste :)
Avatar billede bufferzone Praktikant
27. september 2003 - 14:59 #1
Med javascript, men d et giver ikke så god sikkerhed, da passwordet står i scriptet. jeg finder lige et link til et gratis script
Avatar billede bufferzone Praktikant
27. september 2003 - 15:01 #2
Avatar billede bufferzone Praktikant
27. september 2003 - 15:03 #3
Avatar billede rit Nybegynder
27. september 2003 - 15:03 #4
Mit spørgsmål går på om det er muligt uden database :)
Avatar billede thesurfer Nybegynder
27. september 2003 - 15:33 #5
jada.. du bruge bare en tekst fil der indeholder:

brugernavn1=password1
brugernavn2=password2
osv..

det er ikke en database.. bare en tekst fil :)
Avatar billede thesurfer Nybegynder
27. september 2003 - 15:41 #6
pseudo kode:

læse linie of split det ved "=" så det kommer til at være:
variabel "user" = "brugernavn1", variable "pass" = "password1"
derefter sammenligner du det fu får fra formen (med request.form("felt navn") med  de respektive værdier ("user" og "pass"):

if request.form("usename") = "user" then
if if request.form("password") = pass" then
  response.write "Du er nu logget ind"
  ' gå videre
end if
else
response.write "Forkert brugernavn eller password"
end if

hvis du bruger "Forkert brugernavn eller password" (i stedet for "Forkert brugernavn" og "Forkert password) kan du undgå at en "hacker" finder et brugernavn og prøver på at gætte password, da han/hun ikke ved om brugernavnet eksistere..

/theSurfer.
Avatar billede rit Nybegynder
27. september 2003 - 15:42 #7
thesurfer > er det en sikker løsning, og ved du hvor jeg finder kode til den med tekstfilen -  :)
Avatar billede thesurfer Nybegynder
27. september 2003 - 15:44 #8
jeg ser lige om jeg kan lase den til dig... hang on..
Avatar billede thesurfer Nybegynder
27. september 2003 - 15:47 #9
jeg vil mene at det er lige så sikkert som en database..

hvis du i stedet for en txt bruger en asp og har brugernavn=password som kommentar, vil det ikke blive udskrevet hvis "hackeren" skulle finde navnet på adgangsfilen:

-- userpass.asp start:

'brugernavn1=password1  <-- kan ikke ses
'brugernavn2=password2  <-- kan ikke ses

fis af, makker  <-- kan ses

-- userpass.asp slut
Avatar billede thesurfer Nybegynder
27. september 2003 - 15:48 #10
..og du kunne kalde filen "kjh45retkjdsfu.asp"... det ville være lidt svært at gætte :)
Avatar billede thesurfer Nybegynder
27. september 2003 - 16:32 #11
dammit.. skal lige noget.. men er begyndt på eksemplet.. se som 1-2 timer..
Avatar billede rit Nybegynder
27. september 2003 - 17:12 #12
Gir 100 poeng, tilsyneladende omfattende :)
Avatar billede thesurfer Nybegynder
27. september 2003 - 19:27 #13
.. er tilbage og arbejder videre på eksemplet..
Avatar billede thesurfer Nybegynder
27. september 2003 - 21:30 #14
her er filernes indhold (login.asp, validate.asp, userpass.asp)

login.asp (form):

<form name="frLogin" action="validate.asp" method="post">
Brugernavn: <input type="text" name="username">
<br>
Kodeord:<input type="password" name="password">
<input type="submit" name="submit" value="Send">
</form>



validate.asp (check om brugernavn og password passer):

<%
Option Explicit ' tving programmøren til at definere variabler (undgår stavefejl)

' vi definere vores variabler:
dim strUP, strOK, strMessage
dim arrLine, arrUserPass
dim i

'''''''' læser fra fil:

Dim fso, f, filespec
Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("userpass.asp")
Set f = fso.OpenTextFile(filespec,1)

' Læs linie for linie indtil slutningen af filen
Do While not f.AtEndOfStream
    ' hvis linien starter med ', er det "gyldigt" og tilføjes strUP
  if left(f.ReadLine, 1) = "'" then strUP = strUp & f.ReadLine & ";"
Loop

f.Close


'''''''''''''''''''

' vi sætter vores variabler:
strOK = "nej"

arrLine = Split(strUP,";") ' split start-strengen ved ";"

  For i = LBound(arrLine) to UBound(arrLine) ' loop så længe der er data

        strUP = replace(strUP,"'","") ' fjerner voes "'"-check thingest
        arrUserPass = Split(strUP,";") ' splitter brugernavn og password ved ";"

        ' der skal være noget at arbejde med, ellers giver den fejl:
        if left(arrUserPass(i), InStr(arrUserPass(i), "=") - 1) <> "" then

            ' her sammenligner vi det indstastede brugernavn med det fra filen:
            if request.form("username") = left(arrUserPass(i), InStr(arrUserPass(i), "=") - 1) then

                ' brugernavn er ok, så vi sammenligner password:
                if request.form("password") = mid(arrUserPass(i), InStr(arrUserPass(i), "=") + 1) then
                    ' brugernavn og password er ok:
                strOK = "ja" ' checkpoint
                end if
            end if
        end if

  Next ' loop
if strOK = "ja" then
    ' gå videre
    response.write "Du er nu logget ind"
else
    ' hvis fejlmeddelse:
    response.write "Forkert brugernavn eller password"
end if

%>


userpass.asp:

<%
'brugernavn1=password1
'brugernavn2=password2
%>
Fis af makker :)



det var sådan set det :) .. det er lidt komplex, men det virker..
dog skal jeg lige sige at jeg ikke har haft mulighed for at læse fra filen (min IIS fejlede, og frip.dk tillader ikke brugen af FileSystemObject).. så jeg brugte en streng til at simulere indholdet af den læste fil:

strUP = "'brugernavn1=kodeord1;'brugernavn2=kodeord2;'brugernavn3=kodeord3;'brugernavn4=kodeord4"

sådans skulle outputet fra den læste fil blive..

ps: det ville måske være en god ide at omdøbe "userpass.asp" til noget andet, og samtidig ændre denne linie så den passer med filnavnet:

filespec = Server.Mappath("userpass.asp")

hvis der er noget, så skriver du bare.. husk at afprøv det.. :)

-håber det virker.

/theSurfer.
Avatar billede thesurfer Nybegynder
27. september 2003 - 21:45 #15
-- rettelse (erstatter det der var der før)--

if strOK = "ja" then
    ' gå videre
    response.write "Du er nu logget ind"

    ' vi gemmer et "ja" i en session kaldet login,
    ' så kan vi checke om brugeren er logget ind eller ej
    Session("login") = "ja"
else
    ' hvis fejlmeddelse:
    response.write "Forkert brugernavn eller password"
   
    ' det samme som op i strOK = ja, bare "nej" :)
    Session("login") = "nej"
end if


-- tølføjelse (filen "protection.asp")--
protection.asp:

' den checker om brugeren er logget ind.. hvis han/hun ikke er det, sendes de til login siden:
<% if session("login") <> "ja" then response.redirect "login.asp" %>

-- tilføjelse (indsættes i ALLE de hemmelige sider):
<!-- #include file="protection.asp" //-->
Avatar billede thesurfer Nybegynder
27. september 2003 - 21:56 #16
-- tølføjelse (filen "logout.asp") --
logout.asp:

<% session("login") "nej" ' "nej" må være alt andet end "ja" %>
Avatar billede thesurfer Nybegynder
27. september 2003 - 21:58 #17
øh.. glemte "=".. det skulle have været: session("login") = "nej"
Avatar billede thesurfer Nybegynder
27. september 2003 - 22:00 #18
Avatar billede juhlemanden Nybegynder
27. september 2003 - 22:14 #19
Hvorfor ikke bare ligge kodeordet i den side som kontrolerer om kodeordet er rigtigt.. sådan her..:

login.asp:
<html>
<head><title>Angiv password</title></head>
<body>
<form action="kontrol.asp" method="post">
  User: <input type="text" name="user"><br>
  Pass:<input type="password" name="pass"><br>
  <input type="submit" name="submit" value="Send">

</form>
</body>
</html>

Og så kontrol.asp
<%
If request.form("user")="Minbruger" AND request.form("pass")="Hemlig" then
%>
<html>
<head><title>Yesyes</title></head>
<body>
Du er inde!!!
</body>
</html>
<%
else
response.redirect "/login.asp"
end if
%>

hvis det skal være rigtig simpelt :O)

/juhlemanden
Avatar billede thesurfer Nybegynder
27. september 2003 - 22:20 #20
juhlemanden's metode:

* hvis man hardcode username/password ville der kun være 1 person der kunne komme ind.. eller flere om samme login..
* du har hverken brugt session eller cookie, hvilket betyder at den eneste side du beskytter er "kontrol.asp".. der er vist ikke så meget at beskytte på den :)

theSurfer's metode:
* du beskytte alle dine sider
* du kan have flere bruger med forskellige logins.. det kan udbygges til user levels, dvs forskellige niveauer som folk har adgang til
Avatar billede juhlemanden Nybegynder
27. september 2003 - 22:38 #21
thesurfer>> Ja okay, jeg kan da godt sætte en session så det virker på alle side, ikke svært :O) efter følgdende:
If request.form("user")="Minbruger" AND request.form("pass")="Hemlig" then
insætter du en linie med
Session("adgang")="ok"
Du kan så lave en logout.asp
som ser således ud
<%
Session("adgang")=""
Response.redirect "/login.asp"
%>

Du skal så på alle sider der er hemlige kontroler om sessionen er ok

Hvis du vil har felere brugere, gå ikke ud fra du vil have rigtig mange da du skriver at du ikke vil bruge database.. :O)
Men hvis du vil kan du bare bruge følgende:
If (request.form("user")="Minbruger" AND request.form("pass")="Hemlig") OR (request.form("user1")="Minbruger" AND request.form("pass")="Hemlig1") OR (request.form("user")="Minbruger" AND request.form("pass")="Hemlig") then


/juhlemanden
Avatar billede rit Nybegynder
27. september 2003 - 23:28 #22
Takker meget, den var mere omfattende end jeg havde forvented, håber jeg kan klare den, må ha lidt tid :)
Avatar billede rit Nybegynder
28. september 2003 - 00:25 #23
Har problemer. Paster validate.asp


<!-- #include file="protection.asp" //-->
<%
Option Explicit ' tving programmøren til at definere variabler (undgår stavefejl)

' vi definere vores variabler:
dim strUP, strOK, strMessage
dim arrLine, arrUserPass
dim i

'''''''' læser fra fil:

Dim fso, f, filespec
Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("userpass.asp")
Set f = fso.OpenTextFile(filespec,1)

' Læs linie for linie indtil slutningen af filen
Do While not f.AtEndOfStream
    ' hvis linien starter med ', er det "gyldigt" og tilføjes strUP
  if left(f.ReadLine, 1) = "'" then strUP = strUp & f.ReadLine & ";"
Loop

f.Close


'''''''''''''''''''

' vi sætter vores variabler:
strOK = "nej"

arrLine = Split(strUP,";") ' split start-strengen ved ";"

  For i = LBound(arrLine) to UBound(arrLine) ' loop så længe der er data

        strUP = replace(strUP,"'","") ' fjerner voes "'"-check thingest
        arrUserPass = Split(strUP,";") ' splitter brugernavn og password ved ";"

        ' der skal være noget at arbejde med, ellers giver den fejl:
        if left(arrUserPass(i), InStr(arrUserPass(i), "=") - 1) <> "" then

            ' her sammenligner vi det indstastede brugernavn med det fra filen:
            if request.form("username") = left(arrUserPass(i), InStr(arrUserPass(i), "=") - 1) then

                ' brugernavn er ok, så vi sammenligner password:
                if request.form("password") = mid(arrUserPass(i), InStr(arrUserPass(i), "=") + 1) then
                    ' brugernavn og password er ok:
                strOK = "ja" ' checkpoint
                end if
            end if
        end if

  Next ' loop
if strOK = "ja" then
    ' gå videre
    response.write "Du er nu logget ind"

    ' vi gemmer et "ja" i en session kaldet login,
    ' så kan vi checke om brugeren er logget ind eller ej
    Session("login") = "ja"
else
    ' hvis fejlmeddelse:
    response.write "Forkert brugernavn eller password"
   
    ' det samme som op i strOK = ja, bare "nej" :)
    Session("login") = "nej"
end if

%>
Avatar billede rit Nybegynder
28. september 2003 - 00:26 #24
Er
validate.asp
OK ?
Avatar billede thesurfer Nybegynder
28. september 2003 - 00:27 #25
har du ændret noget i den efter jeg pastede den?
Avatar billede rit Nybegynder
28. september 2003 - 00:28 #26
JA :)
Avatar billede thesurfer Nybegynder
28. september 2003 - 00:30 #27
hehe.. hvad har du lavet om, og hvilken fejl får du?
Avatar billede rit Nybegynder
28. september 2003 - 00:39 #28
Undskyld. Hvis der er fejl, så ville det være super hvis du paster en fejl-fri version :)
Avatar billede thesurfer Nybegynder
28. september 2003 - 00:41 #29
"Har problemer. Paster validate.asp".. problemer?..
så er det jeg spørg igen: hvilken fejl får du?
skriv hele fejl, dvs nummer, linie, beskrivelse osv..
Avatar billede rit Nybegynder
28. september 2003 - 00:44 #30
Det er kun: Siden kan ikke vises
Avatar billede rit Nybegynder
28. september 2003 - 00:46 #31
Der er også
HTTP 500 - Intern serverfejl
Internet Explorer
Avatar billede thesurfer Nybegynder
28. september 2003 - 00:52 #32
prøv at klippe/cut det her:

Dim fso, f, filespec
Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("userpass.asp")
Set f = fso.OpenTextFile(filespec,1)

' Læs linie for linie indtil slutningen af filen
Do While not f.AtEndOfStream
    ' hvis linien starter med ', er det "gyldigt" og tilføjes strUP
  if left(f.ReadLine, 1) = "'" then strUP = strUp & f.ReadLine & ";"
Loop

f.Close

og indsæt det her:
strUP = "'brugernavn1=kodeord1;'brugernavn2=kodeord2;'brugernavn3=kodeord3;'brugernavn4=kodeord4"


hvis siden vises, kan du bruger brugernavnX (X=1-4), og password kodeordX (X=1-4)
Avatar billede thesurfer Nybegynder
28. september 2003 - 00:58 #33
..dvs der skal ikke stå "dim fso, f... f.close" men "strUP = ..."
Avatar billede rit Nybegynder
28. september 2003 - 01:08 #34
Blir nødt at stoppe, vender tilbage i morgen :(
Avatar billede thesurfer Nybegynder
28. september 2003 - 01:14 #35
ok
Avatar billede rit Nybegynder
28. september 2003 - 16:00 #36
Så er jeg på banen igen.
Da det fungerer hos dig kan du så ikke paste koden som fungerer, jeg kan ikke finde ud af de tilføjelser/korigeringer.
Skal der være 5 filer :)
Avatar billede thesurfer Nybegynder
28. september 2003 - 19:26 #37
..er ved at spise nu.. men jeg kigger lige på det og skriver tilbage inden for en halv time..
Avatar billede rit Nybegynder
28. september 2003 - 19:42 #38
ok
Avatar billede thesurfer Nybegynder
28. september 2003 - 19:48 #39
skal bruges (minimum, mener jeg):
* login side - som også validere brugernavne og passwords
* logout side - som logger brugeren ud
* password fil - som indeholder brugernavne og passwords
* protection/krav side - som stiller krav til hvem må se siden (logged in, level, osv)

når noget ikke virker, skal du altid skrive fejlens nummer og beskrivelse, samt hvilken linie der er fejl i, som også har et nummer..

.. så, hvilken fejl får du? :)
Avatar billede thesurfer Nybegynder
28. september 2003 - 19:54 #40
opret en fil ("userpass.asp") med indholdet:

<%
'brugernavn1=password1
'brugernavn2=password2
%>
Fis af makker :)


opret en fil ("read.asp") med indholdet:

Dim fso, f, filespec
Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("userpass.asp")
Set f = fso.OpenTextFile(filespec,1)

' Læs linie for linie indtil slutningen af filen
Do While not f.AtEndOfStream
    ' hvis linien starter med ', er det "gyldigt" og tilføjes strUP
  if left(f.ReadLine, 1) = "'" then strUP = strUp & f.ReadLine & ";"
Loop

f.Close

reponse.write "strUP: " & strUP


se om det virker.. hvis det virker, paste den linie du får i dit vindue når du loader read.asp i din browser.. den skulle starte med:

strUP:
Avatar billede rit Nybegynder
28. september 2003 - 20:12 #41
OK
Avatar billede rit Nybegynder
28. september 2003 - 20:47 #42
Jeg får:
Siden kan ikke vises
Der er problemer med den side, du prøver at åbne, og den kan ikke vises.
HTTP 500 - Intern serverfejl
Internet Explorer


Har disse filer på serveren:
login.asp
logout.asp
protection.asp
read.asp
userpass.asp
validate.asp

index.htm
I inedex har jeg:
<html>

<head>


</head>

<body>

<p><b><a href="login.asp">Til log ind</a></b></p>

</body>

</html>
Avatar billede rit Nybegynder
28. september 2003 - 20:57 #43
validate.asp ser sådan ud:

<!-- #include file="protection.asp" //-->
<%
Option Explicit ' tving programmøren til at definere variabler (undgår stavefejl)

' vi definere vores variabler:
dim strUP, strOK, strMessage
dim arrLine, arrUserPass
dim i

'''''''' læser fra fil:

strUP = "'brugernavn1=kodeord1;'brugernavn2=kodeord2;'brugernavn3=kodeord3;'brugernavn4=kodeord4"




'''''''''''''''''''

' vi sætter vores variabler:
strOK = "nej"

arrLine = Split(strUP,";") ' split start-strengen ved ";"

  For i = LBound(arrLine) to UBound(arrLine) ' loop så længe der er data

        strUP = replace(strUP,"'","") ' fjerner voes "'"-check thingest
        arrUserPass = Split(strUP,";") ' splitter brugernavn og password ved ";"

        ' der skal være noget at arbejde med, ellers giver den fejl:
        if left(arrUserPass(i), InStr(arrUserPass(i), "=") - 1) <> "" then

            ' her sammenligner vi det indstastede brugernavn med det fra filen:
            if request.form("username") = left(arrUserPass(i), InStr(arrUserPass(i), "=") - 1) then

                ' brugernavn er ok, så vi sammenligner password:
                if request.form("password") = mid(arrUserPass(i), InStr(arrUserPass(i), "=") + 1) then
                    ' brugernavn og password er ok:
                strOK = "ja" ' checkpoint
                end if
            end if
        end if

  Next ' loop
if strOK = "ja" then
    ' gå videre
    response.write "Du er nu logget ind"

    ' vi gemmer et "ja" i en session kaldet login,
    ' så kan vi checke om brugeren er logget ind eller ej
    Session("login") = "ja"
else
    ' hvis fejlmeddelse:
    response.write "Forkert brugernavn eller password"
   
    ' det samme som op i strOK = ja, bare "nej" :)
    Session("login") = "nej"
end if

%>
Avatar billede rit Nybegynder
28. september 2003 - 21:01 #44
Hvilken fil blir man sendt til når brugernavn og password er OK ?
Avatar billede thesurfer Nybegynder
28. september 2003 - 21:02 #45
hmm.. jeg har prøvet på finde ud af hvad det er der gør at melder fejl..
det er denne linie: Set f = fso.OpenTextFile(filespec,1)
altså når den åbener tekst filen for at læse fra den..
Avatar billede arne_v Ekspert
28. september 2003 - 21:04 #46
Lige en kommentar til sikkerheden.

Filen med username/password kan vel bare ligge et sted, hvor IIS ikke
vil sende den til brugerne !?
Avatar billede thesurfer Nybegynder
28. september 2003 - 21:04 #47
efter Session("login") = "ja" indsætter du den kode der skal udføres..
f.eks. (send brugeren videre til topsecret.asp):
response.redirect "topsecret.asp"
Avatar billede thesurfer Nybegynder
28. september 2003 - 21:06 #48
arne_v> du kan ikke læse indholdet af en asp il, med mindre det er slået til i IIS.. og brugernavn/password står som kommentar..

så det kan vel være lige meget hvor filen ligger, så længe Script Source Access er sat til nej
Avatar billede arne_v Ekspert
28. september 2003 - 21:10 #49
Jo - men hvis den lå et andet sted, så kunne man nøjes med .txt fremfor .asp !
Avatar billede thesurfer Nybegynder
28. september 2003 - 21:12 #50
det har du ret i, hvis brugerne ikke havde adgang til det område.. men jeg ville aldrig nøjes med en txt fil.. jeg ville foretrække en asp, pga ekstra sikkerhed.. men ja, du har ret..
Avatar billede thesurfer Nybegynder
28. september 2003 - 21:15 #51
jeg har testet script og det virker..
jeg ved dog ikke hvorfor læse-delen ikke virker.. hvis jeg kører den del et par gange, vil jeg få beskeden "HTTP 403.9 - Access Forbidden: Too many users are connected"

det er denne linie der skaber problemer (åbner tekst filen til læsning):

Set f = fso.OpenTextFile(....)
Avatar billede thesurfer Nybegynder
28. september 2003 - 21:20 #52
det mærkelige er at læse-delen er noget jeg har fundet på nettet, på forskellige sites hvor man kan lærer asp.. så det virker selvfølgelig.. men jeg ved ikke hvorfor jeg ikke kan bruge det på min IIS i WinXP Pro..

måske skal jeg ændre nogle indstillinger? nogen forslag?
Avatar billede thesurfer Nybegynder
28. september 2003 - 21:24 #53
jeg opretter sq et spm.. det her vil jeg have opklaret! :)
Avatar billede thesurfer Nybegynder
28. september 2003 - 21:44 #54
Avatar billede thesurfer Nybegynder
11. oktober 2003 - 23:32 #55
jeg har snakket med 'cesil' via mit spm, og kunne ikke finde en løsning på fejlen..

jeg har lige fundet ud af at det er min WinXP/IIS der fejler.. har nemlig prøvet et "læs fra fil"-script på Win98/PWS, og der virkede  fint.. jeg kopierede mappen over til winxp/iis, og så virkede det ikke..

jeg vil kigge på login scriptet i løbet af et par dage.. og så skal det bare virke!..

- hader når noget ikke virker.
Avatar billede rit Nybegynder
13. oktober 2003 - 13:33 #56
Udmærket, takker :)
Avatar billede thesurfer Nybegynder
18. oktober 2003 - 03:37 #57
Undskyld jeg først skriver nu.. jeg havde glemt dig, og så kunne jeg ikke finde spm'et..

Jeg har lavet scriptet færdigt, og det fungere fint.

Jeg har dog kun testet det på PWS (Personal Web Server) i Win98, da min IIS i WinXP (af en eller anden grund) ikke gider at læse fra filer.. sikkert noget med rettigheder (detmå jeg kigge på senere)..

Scriptet indeholder i alt 5 filer:
login.asp - logger brugeren ind
logout.asp - logger brugeren ud
protection.asp - checker om brugeren er logget ind / har tilladelse til at se siden
userpass.asp - filen der indeholder username/password

Den 5. fil er page1.asp som er en test side der demonstrerer hvordan scriptet virker..
Filen page1.asp er beskyttet og man skal derfor være logget ind for at kunne se indholdet af den.

Jeg har kommenteret næsten hele scriptet, nogle ting behøver ikke nogen kommentar, men du er meget velkommen til at stille spørgsmål.

Tilgængelige brugernavne og password til denne demonstration er:

format: Brugernavn=Password

brugernavn1=password1
brugernavn2=password2
james=bond

Jeg har lavet valideringen af brugernavn og password case-insensitive, dvs "james", "jAmEs" osv er ens..
Hvis du ikke foretrækker at "james" og "jAmEs" skal være forskellige (dvs, case-sensitive i stedet for case-INsensitive), fjener du de 4 "lcase" fra disse 2 linier:

if lcase(request.form("username")) = lcase(left(arrUserPass(i), InStr(arrUserPass(i), "=") - 1)) then

if lcase(request.form("password")) = lcase(mid(arrUserPass(i), InStr(arrUserPass(i), "=") + 1)) then

For at beskytte en side, tilføjer du bare denne linie i TOPPEN (allerøverst):
<!-- #include file="protection.asp" //-->


Her er indholdet af de 5 filer:



*** login.asp (logger brugeren ind) ***

<%
option explicit ' tving programmøren til at definere variablerne for at undgå stavefejl
response.buffer = true ' hele side dannes før den sendes til browseren

dim url
url = request.querystring("url") ' se om brugeren er sendt herover af en beskyttet side
%>
<html>
<head>
</head>
<body onLoad="document.frmLogin.username.focus();">

<a href="page1.asp">Se den beskyttede side her</a>
<br><br>

<%
select case request.form("mode")
case "login"
    if (request.form("username") <> "") and (request.form("password") <> "") then

dim strUP, strOK, arrLine, i, arrUserPass, strLinie, strFejlBesked

Dim fso, f, filespec
Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("userpass.asp")
Set f = fso.OpenTextFile(filespec,1)

do while f.AtEndOfStream = false ' så længe vi ikke er nået til slutningen af filen
strLinie = f.Readline ' put indholdet af linien over i variablen "strLinie"

' hvis linien starter med "'*" er det en "brugernavn=password"-linie,
' og tilføjes til strUP (strUP = strengen UserPassword) og splittetegnet ";":
if left(strLinie, 2) = "'*" then strUP = strUP & strLinie  & ";"
loop ' gentag

f.Close ' luk filen igen


strOK = "nej" ' CheckPoint: når brugernavn og password er OK, sættes strOK til "ja"

arrLine = Split(strUP,";") ' split start-strengen ved ";"

  For i = LBound(arrLine) to UBound(arrLine) ' loop så længe der er data

        strUP = replace(strUP,"'*","") ' fjerner voes "'"-check thingest
        arrUserPass = Split(strUP,";") ' splitter brugernavn og password ved ";"

        ' der skal være noget at arbejde med, ellers giver den fejl:
        if left(arrUserPass(i), InStr(arrUserPass(i), "=")) <> "" then

            ' her sammenligner vi det indstastede brugernavn med det fra filen:
            if lcase(request.form("username")) = lcase(left(arrUserPass(i), InStr(arrUserPass(i), "=") - 1)) then
            ' det indtastede brugernavn matchede det fra filen...

                ' brugernavn er ok, så vi sammenligner password:
                if lcase(request.form("password")) = lcase(mid(arrUserPass(i), InStr(arrUserPass(i), "=") + 1)) then
                    ' brugernavn og password er ok:
                    strOK = "ja" ' CheckPoint: Vi har fundet brugeren!
                end if
            end if
        end if

  Next ' gentag

        if strOK = "ja" then
            ' Brugeren er fundet, fortæl brugeren at han er logged ind:
            response.write "Information: Du er nu logget ind."
            Session("login") = "ja" ' session sættes til "ja". Sider kan nu checke om brugeren må se dem.

           
            '''''''''''''''''''''''''''''''''''''''
            ' Brugeren er nu logget ind.
            '
            ' Hvis brugeren var gået ind på en beskyttet side, og blev sendt tilbage til login siden,
            ' kan du sende ham tilbage til siden han kom fra.. på den måde skal han ikke selv finde frem
            ' til siden igen.
            '
            ' Send brugeren tilbage hvor han kom fra (kan deaktiveres ved at sætte et ' tegn foran linien):           
            if url <> "" then response.redirect url

            ' Hvis du foretrækker at sende brugeren til en bestem side hver gang han logger ind,
            ' bruger du (fjern ' tegnet):
            ' response.redirect "side.asp" ' "side.asp" ændres til din side.

            '''''''''''''''''''''''''''''''''''''''

            response.end ' afslut udskrivningen til browseren.
        else
            ' hvis fejlmeddelse:
'            response.write "<b>Forkert brugernavn eller password!"
            Session("login") = "nej" ' session sættes til nej, brugeren afvises ved beskyttede sider.

        end if
    end if
strFejlBesked = "Information: <font style='color: #900000; font-weight: bold;'>Forkert brugernavn eller password</font>"
end select
%>

<TABLE>
<form name="frmLogin" action="login.asp<% if url <> "" then response.write "?url=" & url%>" method="post" onSubmit="this.mode.value='login'">
<TR>
    <TD>Brugernavn</TD>
    <TD>:<input type="text" name="username"></TD>
</TR>
<TR>
    <TD>Password</TD>
    <TD>:<input type="password" name="password"></TD>
</TR>
<TR>
    <TD><input type="hidden" name="mode"></TD>
    <TD><input type="submit" name="submit" value="Log in"></TD>
</TR>
</form>
</TABLE>
<%=strFejlBesked%>
</body>
</html>

**********

*** logout.asp (logger brugeren ud) ***

<% session("login") = "nej" %>
<html>
<head>
</head>
<body>
Du er nu logged ud.

<!-- Disse linier kan du fjerne efter dine tests: //-->
<br><br>
<a href='login.asp'>Login</a>

<!-- </body> og </html> skal ikke fjernes, men denne kommentar kan fjernes: //-->
</body>
</html>

**********

*** protection.asp (checker om brugeren er logget ind) ***

<%
response.buffer = false
if Session("login") <> "ja" then
    ' hvis du ikke vil vise en besked, men sende brugeren til login siden med det samme,
    ' fjerner du bare ' tegnet:
    ' response.redirect "login.asp"
   
    ' du har valgt at vise denne besked:
%>
<html>
<head>
</head>
<body>
Du skal <a href="login.asp?url=<% response.write Request.ServerVariables("SCRIPT_NAME")%>">logge ind</a> før du kan se denne side.
</body>
</html>
<%
' Udskriv ikke mere til browseren:
response.end
end if
%>

**********

*** userpass.asp (indeholder brugernavne og passwords) ***

<%
' Sådan virker denne fil:
' Når du vil lave almindelige kommentarer, bruger du: '
' Når du indsætter brugernavn og password, bruger du: '* (uden mellerum i starten af linien)

' Eksempler:

'*brugernavn1=password1
'*brugernavn2=password2
'*james=bond

' hvis brugeren indtaster addressen på denne fil,
' sendes han videre til login.asp:
response.redirect "login.asp"
%>

**********

*** page1.asp (eksempel på dine sider) ***

<!-- #include file="protection.asp" //-->
<html>
<head>
</head>
<body>
denne side er beskyttet af login.
du kan læse denne side fordi du er logget ind.
<br>
<br>
Der er ikke meget at lave på denne tomme side, så du kan bare <a href="logout.asp">Logge ud</a>, og prøve det hele igen.
</body>
</html>

**********
Avatar billede thesurfer Nybegynder
18. oktober 2003 - 03:50 #58
Update..

Når brugeren er logget ind, og er kommet til login siden via en beskyttet side, sendes han tilbage til denne.
Dette sker via urlen, som på den beskyttede side, kommer til at indeholde "?url=X", hvor X er addressen på den beskyttede side..

Jeg ved ikke om denne del er en sikkerhedsrisiko, idet urlen kan modificeres til at sende til et andet sted..

Jeg havde følgende server variabler tilrådehed:
PATH_INFO
SCRIPT_NAME
URL

..og brugte SCRIPT_NAME.

Måske kan en af de andre asp programmører kommentere dette.
Avatar billede rit Nybegynder
18. oktober 2003 - 04:09 #59
thesurfer > en overraskelse, takker
Jeg kan desværre ikke teste noget lige nu, - du hører fra mig i morgen :)
Avatar billede thesurfer Nybegynder
18. oktober 2003 - 18:50 #60
hmm... man kunne jo bruger InStrRev (In String Reverse, starter fra slutningen af strengen), finde positionen af "/", og derved finde filnavnet (page1.asp).. men det virker som det er nu..

Det ville nok være en god ide at validere så man ikke får "*-_:;?)(/&%" tegn med som brugernavn eller password..
der er vist en eller anden nem måde at gøre det på.. kan dog ikke lige huske hvordan det er.. tror eagleeye brugte den engang..
Avatar billede thesurfer Nybegynder
26. oktober 2003 - 13:26 #61
Har du testet det?
Avatar billede rit Nybegynder
26. oktober 2003 - 16:50 #62
Jeg fik problemer, men forsøger nu igen.
Du hører fra mig :)
Avatar billede thesurfer Nybegynder
19. november 2003 - 23:36 #63
Takker for points.
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

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