Avatar billede pretsmann Nybegynder
03. marts 2005 - 02:32 Der er 19 kommentarer

login med brugernavn

Hej

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
                                                           
                                                            Session("brugernavn") = Rs("brugernavn")
                                                            Response.Redirect("login_bruger.asp?mode=forside")                                                       
                                                           
                                                    else
                                                        stripstate = "Adgangskoden er forkert"
                                                    end if
                                            end if
                                           
                                        rs.Close
                                        set rs = nothing
                                       
                                else   
                                    stripstate = "Du har ikke udfyldt felterne"
                                end if
                                   
                            end if %>

Det kunne måske tyde på at hvis session ikke er tom kan man få adgang???? Men der skulle jo gerne tjekkes i access tabellen om det eksisterer...
Avatar billede moocher Nybegynder
03. marts 2005 - 07:16 #1
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
%>

<> betyder alt andet
Avatar billede busschou Praktikant
03. marts 2005 - 08:08 #2
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
Avatar billede busschou Praktikant
03. marts 2005 - 08:11 #3
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
Avatar billede busschou Praktikant
03. marts 2005 - 08:14 #4
hvis du i øvrigt vil have det helt sikkert så bør du også sikre dig imod sql injection
Avatar billede busschou Praktikant
03. marts 2005 - 08:14 #5
men det er mulig du allerede gør det :o)
Avatar billede fennec Nybegynder
03. marts 2005 - 08:18 #6
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.
Avatar billede fennec Nybegynder
03. marts 2005 - 08:21 #7
... 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.
Avatar billede fennec Nybegynder
03. marts 2005 - 08:25 #8
pretsmann >>
Har du ikke en eller anden indikation på om en bruger er admin. F.eks et 0/1 felt i databasen??? Den værdi gemmer du bare i en session:

Session("brugernavn") = Rs("brugernavn")
Session("Admin") = Rs("IsAdmin")

På alle dine admin sider tjekker du så bare den session også.
Avatar billede busschou Praktikant
03. marts 2005 - 08:29 #9
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
Avatar billede fennec Nybegynder
03. marts 2005 - 09:07 #10
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.
Avatar billede busschou Praktikant
03. marts 2005 - 09:19 #11
fennecc >>
jo da no hard feelings :o) vi er jo dybest set enige i det vi skriver
Avatar billede moocher Nybegynder
03. marts 2005 - 10:46 #12
Ups... havde læst det som php :D
Avatar billede pretsmann Nybegynder
03. marts 2005 - 14:46 #13
fennec 8:25 >>  Nej der er ingen indikation på om brugeren er admin, der er kun 2 admins og de ligger i en tabel for sig...
Avatar billede pretsmann Nybegynder
03. marts 2005 - 15:55 #14
Hvad gør sql injection ???
Avatar billede busschou Praktikant
03. marts 2005 - 16:27 #15
det gør at man kan snyde sig ind i dit system ved at udnytte dine select statements
Avatar billede busschou Praktikant
03. marts 2005 - 16:29 #16
der var engang en artikkel om det her på eksperten men den er vist væk igen
Avatar billede busschou Praktikant
03. marts 2005 - 16:33 #17
Avatar billede fennec Nybegynder
03. marts 2005 - 16:41 #18
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...
Avatar billede busschou Praktikant
08. juli 2005 - 08:16 #19
pretsmann >> kommet videre ?
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