Avatar billede botha Nybegynder
05. september 2003 - 22:26 Der er 74 kommentarer og
1 løsning

Simpelt adgangskontrol

Jeg ved ikke om man kan, eller hvordan man gør, men jeg skal lave en vildt simpel password kontrol.

brugernavn : (personens fornavn)
kodeord    : (et eller andet som genereres fra det indtastede brugernavn)

Kan man det ? jeg forestillede mig noget med at hente en talværdi ud fra det indtastede brugernavn.
Dvs at den besøgende tror det er et vildt vanskeligt kodeord, men i virkeligheden, kan jeg med det samme fortælle en ny bruger, hvad hans kodeord vil være UDEN at jeg skal til at indtaste personen i en database eller i det hele taget lave noget som helst.

Kan dette lade sig gøre ?
Avatar billede nmh Nybegynder
05. september 2003 - 22:32 #1
Ja, men det kan det da sagtens. Skal det være tal eller bogstaver?
Avatar billede bufferzone Praktikant
05. september 2003 - 22:32 #2
Det kan da gøres lettere. Du laver en database med brugernavne og password.

Du laver en side hvor en sessionsvariabel sættes til false.
Herefter søges på det bruger navn og password brugeren taster ind og hvis det matcher kombinationen i databasen sættes sessionsvariablen til true.

Herefter indbygger du et check på alle dine sider der hvis sessionsvariablen er true viser sider, ellers redirecter til den loginside hvor brugernavn og password indtastes.

Det er ikke så svært
Avatar billede botha Nybegynder
05. september 2003 - 22:33 #3
det skal gerne fungere uden brug af database

og hvis det er muligt med bogstaver eller blandet vil det være perfekt, ellers bare tal
Avatar billede bufferzone Praktikant
05. september 2003 - 22:36 #4
Hvis ikke du bruger en database vil alle brugere jo skulle have samme brugernavn og password og det giver ikke den store sikkerhed. hvis det er dette du vil, kan do downloade masser af færdige scripts der sætter et password på siden med javascript. Den løsning jeg beskriver giver langt bedre sikkerhed og giver også flere muligheder hvis du tænker dig en smule om.
Avatar billede bufferzone Praktikant
05. september 2003 - 22:37 #5
Her er f.eks. et eksemper og der er mange flere
http://javascript.internet.com/passwords/login-coder.html
Avatar billede bufferzone Praktikant
05. september 2003 - 22:38 #6
Avatar billede nmh Nybegynder
05. september 2003 - 22:38 #7
Bufferzone>>
Brugeren har ikke samme brugernavn og password.
Passwordet genereres ud fra brugernavnet, og brugerne kender ikke systemet.
men de skal angive passwordet og asp-systemet kan så straks afgøre om det er rigtigt.
Avatar billede botha Nybegynder
05. september 2003 - 22:40 #8
ja nemlig, men hvor hvordan laver jeg det.
Avatar billede bufferzone Praktikant
05. september 2003 - 22:41 #9
Måske med MD5 kryptering, jeg kikker lige om der skulle være noget
Avatar billede thesurfer Nybegynder
05. september 2003 - 22:41 #10
man kan vælge at:
- bruge database der indeholder brugernavn og password
- bruge tekstfil der indeholder brugernavn og password
- hardcode, dvs. skrive brugernavn og password direkte i asp filen

hvis man bruger en tekstfil, skal man være sikker på at serveren man bruger, tillader at man bruger FileSystemObject.. FSO bruges til at læse filer/mapper osv..

husk ikke at bruge et bestemt tal til et bestem bogstav.. f.eks.:
01 = a, 02 = b, 03 = c, 04 = d, 05 = e, osv..

passwordet til brugenavnet "abe" bliver så 010205.. finder man algoritmen, kan man nemt komme ind på andre brugers konti..
Avatar billede bufferzone Praktikant
05. september 2003 - 22:42 #11
Avatar billede botha Nybegynder
05. september 2003 - 22:42 #12
hvis vi nu siger at en person hedder "bent" og trækker talværdi ud af det "251420" (b=2 e=5 n=14 t=20)
og i en login.asp laver noget i stil med "if request("user")=talværdi then ..."

forstår i den ? jeg mangler bare at kunne trække en eller anden værdi ud af navnet "Bent"
Avatar billede botha Nybegynder
05. september 2003 - 22:44 #13
-> thesurfer :ja men hvis man fx kunne trække talværdien ud, og spejlvende den, ville det virke knapt så logisk.

OG det er ikke noget vildt hemmeligt der skal gives adgang til.
Avatar billede botha Nybegynder
05. september 2003 - 22:48 #14
ps usernavnet skal også bruges i den side der kommer frem (Hej Bent) så den skal enten med i en session eller request´es
Avatar billede thesurfer Nybegynder
05. september 2003 - 22:56 #15
du vil ikke bruge database.. hvad vil du så bruge?:
- tekstfil der indeholder brugernavn og password
- hardcode, dvs. skrive brugernavn og password direkte i asp filen
Avatar billede botha Nybegynder
05. september 2003 - 23:02 #16
nej jeg mener ikke det skulle være nødvendigt at skrive nogen password ind i nogen filer.
Jeg laver en: 
login1.asp (med form felter) og en
login2.asp som så kontrollere om den værdi dder er skrevet i formfelt "password" er talværdien af det der er skrevet i formfelt "user"

kan det ikke laves ?
Avatar billede squashguy Nybegynder
05. september 2003 - 23:12 #17
botha, hvis du vil generere passwords på denne måde, og nogen skulle få fat i din algoritme, vil samtlige brugere med ét smæk blive kompromitteret. Eller det gør måske heller ikke noget?
Avatar billede thesurfer Nybegynder
05. september 2003 - 23:12 #18
det hele kan laves på 1 side.. pseudo kode:

login.asp:

**form-sektion (submitter til samme fil)**
form-start
input-brugernavn
input-password
button-submit
form-slut

**asp-sektion**
indkode brugernavn
sammenlign password med kodet-brugernavn
hvis password = kodet-brugernavn
lav session, så bruger er logget ind
ellers
vis fejlmeddelse
hvis-slut
Avatar billede thesurfer Nybegynder
05. september 2003 - 23:18 #19
squashguy> jeg har prøvet at forklare dette til botha @ 05/09-2003 22:41:53
og han/hun forstår det godt, men vil alligevel gerne ha' det så'n (se 05/09-2003 22:42:46 og 05/09-2003 22:44:47)
Avatar billede nmh Nybegynder
05. september 2003 - 23:18 #20
Her er et lille VBscript, hvor et navn bliver omdannet til en talkode.
For at afgøre om et password er rigtigt skal man blot
sammenligne kode(navn) med det password brugeren taster ind
function kode(navn)
  x=1
  for i=1 to len(navn)
    x=sin(asc(mid(navn,i,1))*x)*10
  next
  kode=abs(round(x*10000000))
end function
 
Password ok, hvis PW=kode(navn)
her er PW, det password brugren indtaster og navn er hans brugernavn.

Funktionen kode kan laves helt som man har lyst.
Den jeg her har lavet vil næppe kunne brydes af nogen.
Avatar billede squashguy Nybegynder
05. september 2003 - 23:19 #21
ok, det havde jeg lige overset
Avatar billede botha Nybegynder
05. september 2003 - 23:22 #22
->the surfer :  ja noget i den stil, men jeg ville meget gerne de brugbare koder :-)
OG det er ikke noget hvor nogen har noget ud af at logge sig ind som en anden (bortset fra at de så bliver tiltalt som en anden)
Så derfor er det ligemeget om nogen "gætter" systemet.
Jeg skal sendes videre til "velkommen.asp" med en request streng = brugernavn
Avatar billede nmh Nybegynder
05. september 2003 - 23:22 #23
Omkring sikkerhed:
Det er da rigtigt, at kendskab til algoritmen betyder, at så kender man alle adgangskoder, men i nogle tilfælde e
Avatar billede botha Nybegynder
05. september 2003 - 23:23 #24
nmh ->hmm det ser jo fint ud, kan du gøre den færdig for mig ?
Avatar billede nmh Nybegynder
05. september 2003 - 23:25 #25
er denne simple måde at gemme koder på måske at foretrække.
Hvis botha er tilfreds er det ok.
Avatar billede nmh Nybegynder
05. september 2003 - 23:25 #26
ja, hvad skal der gøres mere?
Avatar billede botha Nybegynder
05. september 2003 - 23:29 #27
dette bliver nu til en egentlig opgave - undskyld (men jeg er ikke stiv i VB)
så jeg forhøjer til 200 point.

som jeg skrev :
login1.asp = 2 formfelter "User" og "password"
login2.asp = tjek om user og password matcher og send så videre til fejlside eller til velkommen.asp?user=(user)
Avatar billede nmh Nybegynder
05. september 2003 - 23:34 #28
Her er kontrol-siden.
login2.asp:
<%
Option Explicit
dim UN, PW
function kode(navn)
  Dim i, x
  x=1
  for i=1 to len(navn)
    x=sin(asc(mid(navn,i,1))*x)*10
  next
  kode=abs(round(x*10000000))
end function

UN=request.form("UN")
PW=request.form("PW")

if kode(UN)=PW then
  Response.redirect("PasswordOK.asp")
else
  Response.redirect("Fejl.asp")
end if
%>
Avatar billede thesurfer Nybegynder
05. september 2003 - 23:35 #29
jeg har lavet et hurtigt eksempel med nmh's kode inluderet (filen hedder 'login.asp'):

<%Option Explicit%>

<form action="login.asp" method="post">
Brugernavn: <input type="text" name="username">
<br>
Password: <input type="password" name="password">
<br>
<input type="submit">
</form>

<%
dim strUser, strPass, strEncUser

dim x, i

function kode(navn)
  x=1
  for i=1 to len(navn)
    x=sin(asc(mid(navn,i,1))*x)*10
  next
  kode=abs(round(x*10000000))
end function

strUser = request.form("username")
strPass = request.form("password")
strEncUser = kode(strUser)

if password = strEncUser then
  ' ok
  Session("user") = strUser

else
  response.write "<br><br>Fejl i brugernavn eller password"
end if
%>
Avatar billede nmh Nybegynder
05. september 2003 - 23:37 #30
Her er login-siden:
login2.asp:
<html>
<body>
<h1>Velkommen</h1>
<form action="login2.asp" method=post>
Brugernavn:<input type=text name="UN">
Password:<input type=text name="PW">
</form>
</body>
</html>
Avatar billede thesurfer Nybegynder
05. september 2003 - 23:38 #31
note: koden er ikke testet.. afprøv den..

man kunne evt tilføje: response.write "Hej " & session("user") & ". Du er nu logget ind"
efter linien: Session("user") = strUser
Avatar billede thesurfer Nybegynder
05. september 2003 - 23:41 #32
de hemmelige sider indeholder så denne linie:

<% if session("user") = "" response.redirect "login.asp" %>

og en logud side:

<%
session("user") = ""
response.write "Du er nu logget ud"
%>
Avatar billede nmh Nybegynder
05. september 2003 - 23:42 #33
Mht kode-funktionen: Kun fantasien sætter grænser for det regneudtryk, man benytter til at generere koder ud fra navnet.
Avatar billede botha Nybegynder
05. september 2003 - 23:45 #34
jeg har ikke helt forstået hvordan jeg finder ud af koden - sorry

fx hvad er koden til bent ?
Avatar billede thesurfer Nybegynder
05. september 2003 - 23:45 #35
hvis du kan bruge mine indlæg, kan du acceptere dette svar
Avatar billede nmh Nybegynder
05. september 2003 - 23:48 #36
koden til bent er 99998495
Avatar billede thesurfer Nybegynder
05. september 2003 - 23:50 #37
dammit :)
Avatar billede nmh Nybegynder
05. september 2003 - 23:51 #38
ups: jeg kom til at skrive BENT
bent har koden 83650499
Avatar billede botha Nybegynder
05. september 2003 - 23:52 #39
hvad er logikken i det ?

(bare så JEG forstår at give folk koder) :-)
Avatar billede thesurfer Nybegynder
05. september 2003 - 23:52 #40
hehe.. jeg fik også 83650499.. undrede mig over 99998495.. :)
Avatar billede nmh Nybegynder
05. september 2003 - 23:53 #41
du kan lave koder på denne måde:
LAv en tekstfil som du kalder kode,vbs, og gem den f.esk. på skrivebordet.

Lad indholdet være

function kode(navn)
  x=1
  for i=1 to len(navn)
    x=sin(asc(mid(navn,i,1))*x)*10
  next
  kode=abs(round(x*10000000))
end function
navn=InputBox("Indlæse et navn: ")
MsgBox kode(navn)
Avatar billede thesurfer Nybegynder
05. september 2003 - 23:54 #42
logikken ?

du ville have et password der var afhængig af brugernavnet.. og det har du fået :)

husk at det er case-sensitive.. dvs "abc" er ikke det samme som "ABC" eller "aBc" osv..
Avatar billede nmh Nybegynder
05. september 2003 - 23:58 #43
Du har fået en ret indviklet måde at lave kode på udfra et navn. Du kan ikke regne koden ud selv, men skal benytte ovenstående lille VBscript til at frembringe koden.
Hvis man skrev kode(Ucase(navn)) blev der ikke gjort forskel på små og store bogstaver. Så var det ikke case-sensitivt.

Hvis det skal være et system, du selv kan regne ud uden det store besvær, så vil det nok være for let at bryde koden.
Avatar billede botha Nybegynder
06. september 2003 - 00:03 #44
jamen det er bare perfekt at man ikke kan regne den ud. takker.

Jeg skal lige have det til at virke før jeg takker helt af, jeg har lidt problemer men det løser sig nok.

giv mig 15 min
Avatar billede botha Nybegynder
06. september 2003 - 00:13 #45
HJÆLP jeg får altså fejl

prøv selv :
http://www.fedtmule.dk/login/login1.asp

jeg har kopieret nøjagtigt hvad du har skrevet, men ender stadig på fejl.asp
Avatar billede nmh Nybegynder
06. september 2003 - 00:23 #46
prøv at lægge funktionen kode ind i  login-siden og tilføj lige før </body>
<%response.write("bent")%>
så kan du se om koden for bent bliver lavet rigtigt.
Avatar billede nmh Nybegynder
06. september 2003 - 00:24 #47
ups: der skal stå response.write(kode("bent"))
Avatar billede botha Nybegynder
06. september 2003 - 00:32 #48
sådan - den skriver nu at man får fejl, men koden ser rigtig ud ?
Avatar billede nmh Nybegynder
06. september 2003 - 00:39 #49
Prøv på fejlsiden både at udskrive PW og kode(UN) og kode("bent")
altså

response.write(PW) , response.write(kode("UN")) samt response.write(kode("bent"))
Avatar billede botha Nybegynder
06. september 2003 - 00:41 #50
dette er nu min login2.asp:
<%
Option Explicit
dim UN, PW
function kode(navn)
  Dim i, x
  x=1
  for i=1 to len(navn)
    x=sin(asc(mid(navn,i,1))*x)*10
  next
  kode=abs(round(x*10000000))
end function

UN=request.form("UN")
PW=request.form("PW")

if kode(UN)=PW then
  Response.redirect("PasswordOK.asp")
else
response.write"fejl side"
response.write(kode("bent"))
'  Response.redirect("Fejl.asp")
end if
%>


FEJL ?
Avatar billede botha Nybegynder
06. september 2003 - 00:46 #51
prøv igen - det ser mystisk ud
Avatar billede botha Nybegynder
06. september 2003 - 00:46 #52
Avatar billede nmh Nybegynder
06. september 2003 - 00:48 #53
jeg glemte, at denne side ikke har en html-del.
gør sådan:
<%

lad være med at redirecte men tilføj i stedet html-delen
>%
<html>
<body>
<%response.write(PW)%> <p>
<%response.write(kode("bent"))%> <p>
<%response.write(kode(UN))%>
</body>
</html>
Avatar billede botha Nybegynder
06. september 2003 - 00:50 #54
det skulle vel give det samme som det jeg har gjort med response.write ??
Avatar billede botha Nybegynder
06. september 2003 - 00:52 #55
min login2.asp ser lige nu sådan ud :
<%
Option Explicit
dim UN, PW
function kode(navn)
  Dim i, x
  x=1
  for i=1 to len(navn)
    x=sin(asc(mid(navn,i,1))*x)*10
  next
  kode=abs(round(x*10000000))
end function

UN=request.form("UN")
PW=request.form("PW")

if kode(UN)=PW then
  Response.redirect("PasswordOK.asp")
else
response.write"<br>PW="
response.write(PW)
response.write"<br>UN="
response.write(kode("UN"))
response.write"<br>bent ="
response.write(kode("bent"))
'  Response.redirect("Fejl.asp")
end if
%>
Avatar billede nmh Nybegynder
06. september 2003 - 00:52 #56
ja, men jeg frygtede, at hvis <html>.... manglede ville det gå i fisk.
Du skal udskrive dette:
response.write(PW) , response.write(kode("UN")) samt response.write(kode("bent"))
Avatar billede botha Nybegynder
06. september 2003 - 00:54 #57
det gør jeg også - gør jeg ikke ?
Avatar billede nmh Nybegynder
06. september 2003 - 00:54 #58
der er en eller anden lille detalje, der driller. Er du frisk på at blive ved lidt endnu til vi får klaret det?
Avatar billede botha Nybegynder
06. september 2003 - 00:55 #59
med dette resultat:
PW=83650499
UN=77775936
bent =83650499
Avatar billede botha Nybegynder
06. september 2003 - 00:56 #60
frisk - nej, men bliver gerne oppe lidt endnu :-)
Avatar billede nmh Nybegynder
06. september 2003 - 00:56 #61
Du udskriver:
PW=83650499
UN=77775936
bent =83650499
ja det er ok, hvad du gør.
Avatar billede botha Nybegynder
06. september 2003 - 00:58 #62
men hvor f.. får den
UN=77775936
fra?
Avatar billede nmh Nybegynder
06. september 2003 - 01:00 #63
ok, jeg kludrede.
Du skaludskrive response.write(kode(UN)) uden ""
Avatar billede botha Nybegynder
06. september 2003 - 01:01 #64
f.. det ligger i at koden til UN = 777osv
Avatar billede nmh Nybegynder
06. september 2003 - 01:03 #65
7777 etc er koden for navnet "UN")
Avatar billede botha Nybegynder
06. september 2003 - 01:04 #66
det hjalp, men stadig går den ikke videre ?
PW=83650499
UN=83650499
bent =83650499
Avatar billede botha Nybegynder
06. september 2003 - 01:05 #67
det er da mærkeligt
Avatar billede nmh Nybegynder
06. september 2003 - 01:08 #68
ja, men nu kan vi da se, at koden PW modtages rigtigt, og at den kode, som serveren udregner, er den rigtige.
Avatar billede nmh Nybegynder
06. september 2003 - 01:11 #69
Nu har jeg fundet fejlen. Det er en af de klassiske, som jeg har hjulpet med en del gange, og nu har jeg selv lavet den.

Når man modtager noget med request....
får man en tekststreng i hovedet.
Kode(UN) er et tal.
Derfor skal sammenligningen mellem PW og Kode(UN) ændres til

if Clng(PW)=kode(UN) then
....
Avatar billede nmh Nybegynder
06. september 2003 - 01:15 #70
Clng konverterer en tekststreng til et tal, hvis det kan lade sig gøre.
Hvis brugeren havde kludret og ikke tastet et tal vil Clng ikke fungere. Defor bør testen ændres til:

if not isNumeric(PW)then response.redirect("fejl.asp")
if kode(UN)=Clng(PW) then
  Response.redirect("PasswordOK.asp")
else
  Response.redirect("Fejl.asp")
end if
Avatar billede botha Nybegynder
06. september 2003 - 01:15 #71
yes det hjalp

MEN lige en sidste ting, hvis man kommer til at sætte et bogstav ind får man en asp fejl istedet for bare at komme til fejl siden ?

hvorfor det ? og kan det laves ?
Avatar billede botha Nybegynder
06. september 2003 - 01:16 #72
nej hvor er du hurtig

takker mange gange for hjælpen

jeg vil i seng nu

velfortjente point :-)
Avatar billede nmh Nybegynder
06. september 2003 - 01:17 #73
ja, det har jeg lige ændret i mit forrige indlæg.
isNumeric(PW) er sand, hvis derer tale om et tal og ellers falsk.
Avatar billede nmh Nybegynder
06. september 2003 - 01:21 #74
det var så lidt. Jeg takker for point.
Jeg lægger nok et par andre forslag til kode-funktioner ind i morgen. Jeg vil lave en, der giver tekst i stedet for tal.
Avatar billede nmh Nybegynder
08. september 2003 - 14:30 #75
Her er en funktion, der laver en bogstavkode med 6 bogstaver udfra bugernavnet.

function kode(navn)
  dim i,j,x,kodeord,s
  kodeord="qwerdzxL"
  for i=1 to len(kodeord)
    x=1
    for j=1 to len(navn)
      x=(x*Asc(Mid(navn,j,1)) + Asc(Mid(kodeord,i,1))) mod 1997
    next
    s=s & Chr(x*i mod 26 + 65)
  next
  kode=Lcase(Mid(s,1,6))
end function

Du kan teste den ved blot at tilføje linien
MsgBox kode(InputBox("Indlæs et navn: "))
og så gemme den som en fil med navnet password.vbs
Hvis du klikker på den kan du indlæse et navn, og den udskriver en bogstackode med 6 bogstaver.
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