Jeg har en side hvor man kan logge sig ind som bruger og jeg selv som admin, men jeg har til min store skræk opdaget at hvis en bruger har logget sig ind med sit brugernavn og kode har han adgang til alle admin sider + til andre brugers profilsider ved at indtaste den direkte url, jeg har sat nedenstående kode på alle låste sider:
<% 'Tjecker om brugeren er logget ind if session("brugernavn") = "" then Response.Redirect("login_bruger.asp?mode=login") end if %>
<% if mode = "login" then
'Hvis brugeren har submittet login formen if Request.ServerVariables("REQUEST_METHOD") = "POST" then
'Tjecker om felterner er udfydlt if Request.Form("brugernavn") <> "" AND Request.Form("adgangskode") <> "" then
Sql = "select * from bruger where brugernavn = '" & Request.Form("brugernavn") & "'" Set rs = Conn.Execute(sql)
'Tjecker om brugeren eksisterer if rs.EOF or rs.BOF then stripstate = "Email eksisterer ikke" else
'tjecker om passwordsne matcher hinanden if rs("Kode") = Request.Form("adgangskode") then
Du der er forskel på = og ==. = tildeler == sammenligninger du skal bruge det sidste.
<% 'Tjecker om brugeren er logget ind if session("brugernavn") == "" then Response.Redirect("login_bruger.asp?mode=login") end if %>
Den her tjekekr jo blot om du er logget ind ikke om du er admin, der skal bruge denne
<% 'Tjecker om brugeren er admin if session("brugernavn") <> "admin_what_so_ever_du_har" then Response.Redirect("login_bruger.asp?mode=login") end if %>
på alle dine "admin" sider skal du lave et tjek på sessionen . Hvis det kun er een som er admin så kan du bare tjekke som moocher skriver nederst Hvis der er flere så kan du evt også sætte en session variabel "admin" når der logges ind og så tjekke på denne istedet på alle dine admin sider
Hvordan kender du iøvrigt forskel på de forskellige brugere? Det ser jo ud som om at blot en adgangskode er accepteret så er den accepteret på alle sider. Du bliver nød til at skildne brugerne fra hinanden på hver deres respektive sider. Hvis du f.x. henter database informationer så må du gøre det ud fra det du har sat i session´s variablerne
moocher >> Der er ikke noget der hedder == i ASP. Det vil give en fejlsyntax. Der findes kun =. Compileren kan godt selv finde ud af, om den skal sammenligne eller sætte værdien ind i en variabel.
... Lidt forkert det jeg fik sagt der. Der er ikke noget der hedder == i ASP (VBScript). Hvis man bruger JScript eksistere det selvfølgelig, men det er jo også en hel anden syntax. Der er dog ikke mange, der bruger JScript.
fennec >> som jeg foreslog 08:08:19 ;o) pretsmann >> hvis du ikke har sikret mod sql injection på din login side så vil jeg blot foreslå du gør det...evt med følgende funktion ------------------------------------------ Function SQLencrypt(ByVal sSQL) sSQL = Replace(sSQL, "'", "''") SQLencrypt=sSQL End Function ------------------------------------------- laver du blot dit brugernavn = SQLencrypt(request.form("brugernavn")) og tilsvarende med kode -inden- du laver dit sql statement
busschou >> Jeg undskylder. Jeg havde ikke læst din post ordentlig igennem, så jeg håber du kan tilgive mig :o)
Skulle vi ikke også smide password'et på selecten: Sql = "select * from bruger where brugernavn = '" & replace(Request.Form("brugernavn"),"'","''") & "' and Kode='"& replace(Request.Form("adgangskode"),"'","''") &"'" Set rs = Conn.Execute(sql) if rs.eof then stripstate = "Forkert brugernavn/adgangskode" else Session("brugernavn") = Rs("brugernavn") Session("Admin") = Rs("IsAdmin") Response.Redirect("login_bruger.asp?mode=forside") end if
Jeg ved godt, at brugeren så ikke får besked om, hvad der er forkert (email/password), men det er ikke godt at oplyse, da det bliver nemmere at gætte sig frem til en løsning. Du skal jo kun gætte en bruger (email) først, indtil man får "Adgangskoden er forkert". Så ved man brugeren eksistere, og skal så bare gætte adgangskoden.
Ved at bruge ' og ; tegn i brugernavnet kan du få adgang til databasen. Det er specielt slem på f.eks en MS-SQL server. Ved at skrive "'; SHUTDOWN;" i brugernavnet, bliver din sql sætning til: select * from bruger where brugernavn = ''; SHUTDOWN;'
Og det får SQL-serveren til at stoppe. Der var faktisk et online dankortbetalingssystem, som ikke havde sikret sig mod dette, så det var muligt at ændre i deres data og stoppe serveren. 4 personer blev slæbt i retten for at have lukket serveren...
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.