Avatar billede Slettet bruger
28. april 2002 - 00:10 Der er 36 kommentarer og
1 løsning

Sikkerhed

Hej eksperter.... jeg har nu på en masse sider set hver sin forklaring på hvordan man bør lave sin login...

så ville jeg lige høre om denne er sikker nok ?

strUsername = Trim(Replace(Request.Form("username")," ' "," " ))
strPassword = Trim(Replace(Request.Form("password")," ' "," " ))

strSQL ="SELECT * FROM admin WHERE username = '" & strUsername & "' AND Password = '" & strPassword & "'"
set rs = conn.execute(SQL)
%>
Avatar billede eagleeye Praktikant
28. april 2002 - 00:23 #1
Ja. Du kan bare replace med to ' det er lige så godt.

Jeg vil lige tilføje at du bør altid havde replace ' med '' inden man skriver til databasen kolonner som er defineret som tekst felt. I hverttilfælde hvis der er et kolonne en bruger kan rette i.

' opfattes af SQL som start og slut på en streng.
'' opfatess som et rigtigt ' som det var ment altså "Ole's bil"
Avatar billede Slettet bruger
28. april 2002 - 00:26 #2
eagleeye>>

hvad er det du siger jeg gør forkert ???

er ikke helt med på historien om ' og " i henhold til ovenstående kode
Avatar billede eagleeye Praktikant
28. april 2002 - 00:27 #3
hvis du vil være lidt mere sikker kan du også tjekke på at den ahr hendtet det rigtige eks:


strSQL ="SELECT * FROM admin WHERE username = '" & strUsername & "' AND Password = '" & strPassword & "'"
set rs = conn.execute(SQL)
if LCase(rs("username")) = LCase(strUsername) then
  'LOGIN OK
else
  'KUNNE IKKE FINDE BRUGEREN
end if


Så har du både databasen til at finde et korrekt brugernavnet, samt du tjekker at brugernavnet er korrekt. Hvis en eller anden har andre metoder til at "snyde" SQL'en, har du en ekster sikkerhed i at du tjekker det databasen finder manuelt bagefter...
Avatar billede eagleeye Praktikant
28. april 2002 - 00:33 #4
du skal ikke hvade " ' " men "'" i replace:

strUsername = Trim(Replace(Request.Form("username"),"'"," "))
strPassword = Trim(Replace(Request.Form("password"),"'"," "))

Om du laver en ' om til to ' eller mellemrum eller ingenting er sådan set ligemeget. Det handler om at få en ' lavet om.
Avatar billede Slettet bruger
28. april 2002 - 00:35 #5
undskyld jeg belemrer dig med dette, men er dette helt forkert ?

' bruges til at tjekke om brugeren finde i db ved login
' Sender resultaterne fra tilføj links til databasen
' Database connection
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("forum.mdb")

strSQL ="SELECT * FROM bruger WHERE name = UCase('"& request.form("navn") &"')" AND Password = UCase('"& request.form("password") &"')"
set rs = conn.execute(SQL)
if LCase(rs("navn")) = LCase(strUsername) then
  'LOGIN OK
else
  'KUNNE IKKE FINDE BRUGEREN
end if
Avatar billede eagleeye Praktikant
28. april 2002 - 00:43 #6
Jeg ville lave den sådan her så du får ' ud af inputet fra formen:

strUsername = Trim(Replace(Request.Form("navn"),"'",""))
strPassword = Trim(Replace(Request.Form("password"),"'",""))
strSQL ="SELECT * FROM bruger WHERE name = UCase('"& strUsername &"')" AND Password = UCase('"& strPassword &"')"
set rs = conn.execute(SQL)
'først tjekke om brugeren findes ved at tjekke om recordsetet er tomt.
if not rs.EOF then
  if LCase(rs("navn")) = LCase(strUsername) then
    'LOGIN OK
  else
    'INGEN BRUGER FUNDET
    'Eller en blev fundet men databasen bruger navn passer ikke med det
    'indtastede brugernavn
  end if
else
  'INGEN BRUGER FUNDET
end if
Avatar billede Slettet bruger
28. april 2002 - 00:47 #7
hvorfor har du to else funktioner ?? den laver jo det samme i begge to eller er det bare mig ?
Avatar billede eagleeye Praktikant
28. april 2002 - 00:52 #8
Ja det er rigtig.... Den ene er fordi der ikke kunne findes en bruger med brugernavnet og passwordet. Den anden er fordi der kunne findes en med brugernavnet og passeordet, men det indtastede bruger navn passer ikke med det databasen har fundet.. hvis det giver mening.


Du kan skrive den om til:

if (not rs.EOF) AND (if LCase(rs("navn")) = LCase(strUsername)) then
  'LOGIN OK
else
  'INGEN BRUGER FUNDET
end if
Avatar billede eagleeye Praktikant
28. april 2002 - 00:55 #9
hmmm skulle være:
if (not rs.EOF) AND (LCase(rs("navn")) = LCase(strUsername)) then
  'LOGIN OK
else
  'INGEN BRUGER FUNDET
end if
Avatar billede Slettet bruger
28. april 2002 - 00:56 #10
ahaaa... det vil sige den øverste af de to kan jeg ligge et indput der siger at passwordet ikke passer til brugernavnet og i den sidste at brugeren ikke eksister...
Avatar billede Slettet bruger
28. april 2002 - 00:58 #11
den mener der er en Syntax error  i denne:
strSQL ="SELECT * FROM bruger WHERE name = UCase('"& strUsername &"')" AND Password = UCase('"& strPassword &"')"
Avatar billede eagleeye Praktikant
28. april 2002 - 01:04 #12
hvad hedder dine i kolonner i databasen for brugernavn og password?

I SQL'en ret:
name til det rigtige kolonnenavn for brugernavn, og
Password til det rigtige kolonnenavn for password
Avatar billede Slettet bruger
28. april 2002 - 01:09 #13
får denne fejl:
http://www.questis.dk/koder/asp/forum/login.asp

ved denne kode:
strSQL ="SELECT * FROM bruger WHERE navn = UCase('"& strnavn &"')" AND Password = UCase('"& strPassword &"')"

db'en:
kollonner:
navn
password

formen:
navn
password
Avatar billede eagleeye Praktikant
28. april 2002 - 01:12 #14
"det vil sige den øverste af de to kan jeg ligge et indput der siger at passwordet ikke passer til brugernavnet og i den sidste at brugeren ikke eksister..."

Både ja og nej. Den øverste er hvis nogen finder en måde at "snyde" SQL-sætningen ved login (du har sikker læst om man ska skrive: ' or '1'='1 i brugernavn og password). Den er du sikret mod, men hvis nu en eller anden har fundet en ny/anden måde så er den første en ekstra tjek på at det indtastede brugernavn passer med det som ligger i databasen. Hvis du ikke havde Replace "'" med "" så ville:
if LCase(rs("navn")) = LCase(strUsername then
fange ' or '1'='1 da man indtaster brugernavnet (' or '1'='1) men i databasen finder den måske bruger navn eagleeye fordi det bruger navn ligger ført i databasen.....Så det er sådan set bare en ekstra sikkerhed i login funktionen. Håber det giver lidt mening.

Den sidste kan man sige: Brugernavn og Password passer ikke sammen.
Avatar billede eagleeye Praktikant
28. april 2002 - 01:14 #15
Prøv at ænder den til:


strSQL ="SELECT * FROM bruger WHERE UCase(navn) = '" & UCase(strnavn) & "' AND UCase(Password) = '" & UCase(strPassword) & "'"
Avatar billede Slettet bruger
28. april 2002 - 01:15 #16
ok.... så er jeg da med på det &:-D
Avatar billede Slettet bruger
28. april 2002 - 01:23 #17
kan ski ikke få det til at hitte..... når jeg nu logger ind.... så får jeg ligegyldigt hvad jeg gør en:

HTTP 500 - Intern serverfejl
Internet Explorer
Avatar billede eagleeye Praktikant
28. april 2002 - 01:26 #18
Prøv at slå "Show Friendly HTTP error messages" i IE under Tools->Internet Option -> Advanced

du få denne fejl jeg har lige prøvet at kikke:
Microsoft OLE DB Provider for ODBC Drivers error '80040e0c'

Command text was not set for the command object.

/koder/asp/forum/login.asp, line 442
Avatar billede Slettet bruger
28. april 2002 - 01:29 #19
hvad vil det sige ??? jeg blev ikke meget klogere
Avatar billede eagleeye Praktikant
28. april 2002 - 01:29 #20
Den skal slå's fra.. altså ingen kryds i checkboksen.
Avatar billede Slettet bruger
28. april 2002 - 01:31 #21
nu er det godt nok en fordansket udgave jeg har...
Avatar billede Slettet bruger
28. april 2002 - 01:34 #22
ahhh... så fik jeg fejlen... men jeg ved ikke hvad den betyder
Avatar billede eagleeye Praktikant
28. april 2002 - 01:37 #23
hvad har du i linie 442?
Det skulle vel ikke være noget rs.open sql,conn,... ?
Avatar billede Slettet bruger
28. april 2002 - 01:39 #24
439 strUsername = Trim(Replace(Request.Form("navn"),"'",""))
440 strPassword = Trim(Replace(Request.Form("password"),"'",""))
441 strSQL ="SELECT * FROM bruger WHERE UCase(navn) = '" & UCase(strnavn) & "' AND UCase(Password) = '" & UCase(strPassword) & "'"
442 set rs = conn.execute(SQL)
Avatar billede eagleeye Praktikant
28. april 2002 - 01:42 #25
arh ups det har jeg ikke set for nu.. du execute (SQL) men SQL-sætningen er i strengen strSQL så ret
set rs = conn.execute(SQL)
TIL:
set rs = conn.execute(strSQL)
Avatar billede Slettet bruger
28. april 2002 - 01:50 #26
ok... så sidste ting.... jeg har jo kun et indput til at send folk hend... da det hele ende i samme eller hvad ?

if not rs.EOF then
  if LCase(rs("navn")) = LCase(strUsername) then
  'LOGIN OK
  else
    'INGEN BRUGER FUNDET
    'Eller en blev fundet men databasen bruger navn passer ikke med det
    'indtastede brugernavn
  end if
else
response.write "ingen brugere fundet"
end if

eller hvor skal jeg ligge min redirect ??
Avatar billede eagleeye Praktikant
28. april 2002 - 01:53 #27
Den side man skal til hvis login er ok kan du ligger ved 'LOGIN OK


if not rs.EOF then
  if LCase(rs("navn")) = LCase(strUsername) then
    'LOGIN OK
    Response.Redirect("hovedsiden.asp")
  else
    'INGEN BRUGER FUNDET
    'Eller en blev fundet men databasen bruger navn passer ikke med det
    'indtastede brugernavn
  end if
else
response.write "ingen brugere fundet"
end if
Avatar billede Slettet bruger
28. april 2002 - 01:57 #28
så sender den mig da til siden: ingen bruger fundet uanset hvad... prøv selv på:
http://www.questis.dk/koder/asp/forum/login.asp?mode=login
Avatar billede Slettet bruger
28. april 2002 - 01:57 #29
Avatar billede eagleeye Praktikant
28. april 2002 - 02:04 #30
Har du et brugernavn og password jeg kan prøve med som test?
Avatar billede Slettet bruger
28. april 2002 - 02:06 #31
Admin 170282
Avatar billede Slettet bruger
28. april 2002 - 02:06 #32
ellers kan du jo bare oprette et
Avatar billede eagleeye Praktikant
28. april 2002 - 02:18 #33
dam jeg er ved at være træt af Eksperten i aften... Jeg får konstat "Unable To Find Page" når jeg laver svar.. og jeg glemmet nogle gange copy mit svar...
Avatar billede eagleeye Praktikant
28. april 2002 - 02:19 #34
det gik godt....


Nå men din SQL finde ikke brugeren fordi der står strnavn og ikke strUsername. Prøv denne SQL:
strSQL ="SELECT * FROM bruger WHERE UCase(navn) = '" & UCase(strUsername) & "' AND UCase(Password) = '" & UCase(strPassword) & "'"
Avatar billede Slettet bruger
28. april 2002 - 02:22 #35
kanont.... så virker det &:-D også en længere kamp men det lykkedes......

takker rigtigt mange gange for din hjælp.... og din tålmodighed med mig
Avatar billede eagleeye Praktikant
28. april 2002 - 02:26 #36
Det var så lidt :)

Når ja. Jeg må hellere lige sige jeg har oprettet en bruger:
Brugernavn:Test Password: Test Email: test@test.mm

Du kan bare slette den igen...
Avatar billede Slettet bruger
28. april 2002 - 02:27 #37
det gør jeg når det engang er færdigt *SS*
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

IT-JOB