sqlLogin="select Id from seb where (seb='"& username &"') AND (pwd='"& password &"')" Set userSet = rs.Execute(sqlLogin) If Not (userSet.BOF Or UserSet.EOF) then Session("usrID") = userSet("Id")
Det kan gøres bedre, men i høj grad mere sikkert - du begår en klassisk brøler: Du tager input fra en anonym bruger og bøffer direkte videre til en kommandofortolker.
Hvad ville der ske hvis jeg angiver følgende som hhv. brugernavn og kode: ' or 'a'='a ' or 'a'='a
Så får du følgende WHERE klausul: (seb='' or 'a'='a') AND (pwd='' or 'a'='a')
Det vil til enhver tid være sandt. Eksisterer der blot én bruger er jeg inde. Ovenstående kan desuden krydres lidt. Hvis jeg ved at der findes en ”admin” bruger kan jeg skrive: admin ' or 'a'='a
Og jeg er inde som ”admin”
Jeg har følgende kommentarer:
1. Check inddata. Forventer du et tal, så type-check det. Forventer du strenge, så vær sikker på at brugeren ikke kan ”bryde ud”. Replace( strInput, ”’”, ”’’” ) er den hurtige fix.
2. Brug "stored procedures". Hvis du leverer data via parameter-objekter er ovenstående sikkerhedshul lukket.
3. Ved mindre der er tale om et hobbyprojekt, bør ASP ikke indeholde sikkerhedslogik el.l. Kod komponenter. Ideelt set bør ASP-kun være 3 linier. Opret objekt, kald objekt, dealloker objekt. Hård kost, men det kører hurtigt.
4. Når du bruger sessions-variable kan din løsning ikke skalere over flere servere. Session-objektet bruger også en del ressourcer. Hvis du regner med mange brugere, er Session-variable bandlyst.
5. Din Access-fil ligger i samme mappe som dit ASP-script. Dvs. jeg kan hente den ned via min browser. Så har jeg alle brugernavne og kodeord. Læg ALDRIG en følsom Access-fil i en ”offentlig mappe”
6. Du lukker ganske flot for din forbindelse med rs.Close og Set rs = Nothing – de bliver bare aldrig kaldt!!!
Tænk dig grundigt om mht. bruger-input og SQL. En SQL-sætning kan temmelig meget. Se f.eks. følgende eksempel:
objDbConn.Execute(”SELECT x FROM y WHERE id=” & Request(”id”))
Hvis dette kører på en SQL-server med SA-kontoen (hvad er kutyme blandt ASP-kodere der laver ovenstående nummer) vil følgende URL-kald lukke SQL-Serveren ned:
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.