Avatar billede mathiasiversen Nybegynder
16. november 2002 - 15:35 Der er 13 kommentarer og
1 løsning

Loginscript. Hvor sikkert er det?

Hvor sikkert er dette login? Er der nogen der har metoder til at hacke det? Er der nogen der har forslag til forbedringer? Og andre kommentarere til det er i øvrigt også velkommen.


<%
Function ValidateString( strSearch )
  Dim objRegExp
  set objRegExp = new RegExp

  objRegExp.IgnoreCase = false
  objRegExp.global = false
  objRegExp.Pattern = "^[a-zA-Z]{1,10}$"

  ValidateString = objRegExp.Test( strSearch )
End Function

if ValidateString( Request("user") ) then
    Dim login, pw, strSQL, objPassRS
    login = replace(Request("user"),"'","")
    pw = replace(Request("password"),"'","")

        strSQL = "SELECT MEMB.ID, ADR.POSTNR FROM member MEMB, addresses ADR " &_
                "WHERE ( pw = '"&pw&"' AND login = '"&login&"' ) AND MEMB.ID = ADR.ID " &_
                        "GROUP BY ADR.POSTNR, MEMB.ID"
        set objPassRS = Conn.Execute(strSQL)

    if not objPassRS.EOF then
        session("POSTNR") = objPassRS("POSTNR")
        conn.Close
                response.write "search/default.asp"
        'response.redirect("search/default.asp")
    else
                conn.close
                response.write "1. default.asp?error=true"
        'response.redirect "default.asp?error=true"
    end if
else
        conn.close
        response.write "2. default.asp?error=true"
    'response.redirect "default.asp?error=true"
end if


/Mathias
Avatar billede bufferzone Praktikant
16. november 2002 - 15:44 #1
Det kommer bl.a an på om den server det køre på er patchet op med de nødvendige sikkerheds patches, ellers kan man bl.a få fat i selve scriptet og dermed alle passwordene
Avatar billede mathiasiversen Nybegynder
16. november 2002 - 15:59 #2
Men er det noget som jeg kan gøre noget ved i min kode eller skal jeg spørge min udbyder?
Avatar billede thomas_regin Nybegynder
16. november 2002 - 16:02 #3
Du kan evt. smide en replace funktion ind på dine pw = '" & pw & "' og login = '" & login & "' for at fjerne evt. apostroffer:

pw = '" & Replace(pw,"'","") & "' and login = '" & Replace(login,"'","") & "'

På denne måde sikrer du, at ingen ondsindede brugere benytter sig af det velkendte sikkerheds-hul med at kunne logge ind som første bruger i databasen..

/thomas
Avatar billede mathiasiversen Nybegynder
16. november 2002 - 16:04 #4
Det tester jeg allerede for i mit script!
Avatar billede mathiasiversen Nybegynder
16. november 2002 - 16:04 #5
Du mener f.eks følgende
' OR '' = '
Dette kan ikke bruges med dette script
Avatar billede thomas_regin Nybegynder
16. november 2002 - 16:37 #6
Herligt! ;)

Så burde du være rimelig sikker.. Hvis du vil være 100%, så lav en VB komponent, som kalder en stored procedure, som kun må kaldes fra en enkelt IP.

/thomas.
Avatar billede mathiasiversen Nybegynder
16. november 2002 - 16:38 #7
Kan du uddybe?
Avatar billede thomas_regin Nybegynder
16. november 2002 - 16:45 #8
Jeps!..

Du skriver en totalt basic stored procedure.. F.eks:

CREATE PROCEDURE dbo.sp_VerifyUser
    (
        @username varchar(100),
        @password varchar(100)
    )
AS
    Select Costumer_ID, Costumer_realName,Prioritet_idfk from Costumer_tbl where Costumer_username = @username and costumer_password = @password
return

GO

Herefter laver du en Visual Basic DLL, som connecter til din stored procedure..

Jeg har desværre ikke mere tid idag, men jeg skal gerne specificere i morgen!

Mvh,

Thomas Regin.
Avatar billede sth Novice
17. november 2002 - 10:15 #9
Det vil jeg da også meget gerne se :)
Avatar billede thomas_regin Nybegynder
17. november 2002 - 12:11 #10
Halløjsa igen.. Efter at ha' gransket situationen en smule er jeg kommet frem til noget, som faktisk er væsentlig nemmere, og efter min overbevisning stadig lige så sikker, og som ikke involverer VB-dll'er:

<!------ Start ------>
<%
if Request.ServerVariables("REQUEST_METHOD") = "POST" then
    if Session("allowed") = "true" then
        Response.Write "Hent dine data i databasen her med en Stored procedure"
        'strSQL = "sp_VerifyUser" & Request.Form("username") & "," & Request.Form("password")
    else
        Response.Write "Posting er ikke tilladt."
    End If
    'Session sættes til falsk
    session("allowed") = "false"
    Response.Redirect("myReturnpage.asp")
End If

'Denne bliver sat, hvis brugeren rent fysisk har besøgt dit site, og udfyldt felterne.
session("allowed") = "true"
%>

<form method=post action=test.asp>
    Username:<br><input type=text size=20><br>
    Password:<br><input type=text size=20><br>
    <input type=submit value=Submit>
</form>
<!------- END -------->

Du skal, som før, lige fjerne apostrofferne i username og password. Denne funktion holder styr på, om en bruger poster direkte fra dit site, eller om han sidder på et helt andet site, og laver skumle planer!

Session("allowed") bliver sat i det øjeblik en bruger besøger din formular, men ikke hvis der kun bliver postet. Eftersom sessions er unikke på en server, kan en anden bruger ikke selv oprette en session på sin egen server, og poste den med over. Ergo er denne funktion på det område 100% sikker.

Fordelen med en Stored procedure er, at den også er rimelig sikker. Du kan f.eks sætte dine varchar(100) til kun at måtte tillade max 10 tegn, f.eks.

@username varchar(10)
@password varchar(10)

Desuden er det naturligvis mere effektivt at bruge SP istedet for ASP-kode, og det skal man jo naturligvis også ha' i mente.

Hvis der er spørgsmål, så spørg løs.

Mvh,

/thomas
Avatar billede thomas_regin Nybegynder
17. november 2002 - 12:39 #11
Hov.. Glemte lige name-attributterne i formularen:

<form method=post action=test.asp>
    Username:<br><input type=text name=username size=20><br>
    Password:<br><input type=password name=password size=20><br>
    <input type=submit value=Submit>
</form>
Avatar billede mathiasiversen Nybegynder
27. januar 2003 - 14:47 #12
thomas_regin... kan du ikke forklare hvordan jeg laver en stored procedure og hvad det vil sige??  forstår du???
Avatar billede thomas_regin Nybegynder
27. januar 2003 - 15:18 #13
Hejsa Mathias,

Naturligvis forstår jeg! ;)

Man kan sige, at stored procedure er SQL-servers udgave af VB's DLL'er. Nogle vil muligvis slå mig i hovedet for den udtalelse, men det er nu det, jeg synes er bedst beskrivende.

En Stored Procedure(SP) er en række instruktioner, som fortæller SQL-server hvordan den skal reagere i forskellige situationer. Oftest bliver en SP brugt, når den samme proces skal køres igen og igen og igen.

En SP består af 2 hoved-punkter:

1. Definineringer
2. Udførelse

Forestil dig, at du har et VB-program, som skal vælge data fra en tabel i databasen, som i dagens anledning hedder "Costumers".

Du kunne nu i din VB-kode skrive:

SQL = "Select * from Costumers where Costumer_firstname = 'Thomas'"
rs.Open SQL, myConn

Dette er på sin vis fint nok, men problemet er at det er svært at genbruge, hvis du har 200 klasser, som allesammen skal hente fra Costumer-tabellen.

Løsningen er at lave en Stored Procedure:

CREATE PROCEDURE dbo.sp_costumers
    (
        /*Her definerer vi variablen @costumer_name*/
            @costumer_name varchar(100)
    )
AS

Select * from Costumers where Costumer_firstname = @costumer_name
return
GO

Nu er denne SP færdig. Du kan nu benytte den fra din VB-kode ved at skrive:

SQL = "sp_costumers 'Thomas'"
rs.Open SQL, myConn

MsgBox("Navnet er " & rs("Costumer_firstname"))

Hvis du senere skal ændre i indholdet af din database eller lave andre ændringer, så skal det kun gøres ét eneste sted, nemlig i databasen, og ikke i koden! Derfor er Stored Procedures en fantastisk god løsning.

Du kan desuden bruge Stored Procedures til en masse andre ting. F.eks at slette felter fra tabeller, checke om dit database-input har det rigtige format og meget, meget mere.. Stored Procedures er et studium i sig selv, så hvis du har fået blod på tanden, så vil jeg anbefale dig at købe en bog om emnet.

Håber at ovenstående viser sig en smule brugbart.

Mvh,

Thomas Regin.
Avatar billede mathiasiversen Nybegynder
17. marts 2003 - 18:40 #14
Hej Thomas. Tusind tak for den uddybende forklaring... Det er meget fornemt.
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