Avatar billede carl_erik Nybegynder
23. februar 2005 - 10:22 Der er 10 kommentarer og
1 løsning

ja/nei spørsmål med sql-injections

Jeg har dette ASPUpload scriptet og lurer på om det er mulig å foreta SQL-Injections her:


kodeeksempel...
NewFileName = Username & File.ext
File.Copy Server.MapPath("Users/UserPictures/" & NewFileName)
File.Delete

Connect.Execute("UPDATE Users SET `Picture` = '"& NewFileName &"' WHERE `id` = "& UID)


I hovedsak er det vel hvis man har et brukernavn som er "' OR '1' = '1" eller "';drop table Users"...

Men altså...er SQL-Injections noe jeg trenger å være redd for?
Avatar billede kalp Novice
23. februar 2005 - 10:27 #1
man kan sige hvis du skriver "' OR '1' = '1" eller en af de andre ting man kan skrive og får en fejl så er dit systemt ikke sikret imod sql injections...
Avatar billede fennec Nybegynder
23. februar 2005 - 10:33 #2
Løsningen er at tjekke dine data.
Tekst skal du bare udskifte alle ' med to. Det gøres med en simpel replace()
Tal skal du bare tjekke også er tal. Det gøres med isnumeric()
I dit tilfælde skal du bare gøre:

NewFileName = replace(NewFileName,"'","''")
if not isnumeric(UID) then
  response.write "Skal være et tal"
  response.end '<-- stopper kode afvikling
end if
Connect.Execute("UPDATE Users SET `Picture` = '"& NewFileName &"' WHERE `id` = "& UID)

Du skulle så gerne være sikret...
Avatar billede carl_erik Nybegynder
23. februar 2005 - 10:44 #3
Er jeg da sikret?
Avatar billede carl_erik Nybegynder
23. februar 2005 - 10:45 #4
MÅ bare legge til at Brukernavn ligger i en session....men det gjør vel ikke noe?
Avatar billede fennec Nybegynder
23. februar 2005 - 11:17 #5
Så længe du tjekker alle dine ASP variabler, der bruges i SQL-sætningen, med det tilhørerende tjek jeg har lavet, skulle du gerne være 100% sikret mod sql-injections. Datoer skal selvfølgelig også tjekkes, men da de gerne skal formateres rigtigt, gør jeg det nå jeg kører dem igennem min formaterings rutine.
Avatar billede carl_erik Nybegynder
23. februar 2005 - 11:23 #6
hvordan forandrer man datoen?
Avatar billede fennec Nybegynder
23. februar 2005 - 11:37 #7
Jeg bruger denne (til MS-SQL formatet yyyymmdd). Den vil kun godtage dd-mm-yyyy formatet som indput, ellers indsættes en default værdi, og jeg ved så at returværdien ikke kan skabe en sql-injections. Kræver også at serveren kører med DK format (session.LCID = 1030)

Function ConvertToSqlDate(dato)
dim SQLYear,SQLMonth,SQLDay
  if MyIsDate(dato) then
    SQLYear = Year(dato)
    SQLMonth = Month(dato)
    SQLDay = Day(dato)
    if SQLDay<10 then
    SQLDay = 0&SQLDay
    end if
    if SQLMonth<10 then
      SQLMonth = 0&SQLMonth
    end if
    ConvertToSqlDate = SQLYear&SQLMonth&SQLDay
  else
    'Default værdi "1 jan 1900"
    ConvertToSqlDate = "19000101"
  end if
End Function

function MyIsDate(dato)
dim returVal
returVal = false
if len(dato) = 10 then
  if isnumeric(left(dato,2)) then
  if cint(left(dato,2)) >= 1 and cint(left(dato,2)) <= 31 then
    if isnumeric(mid(dato,4,2)) then
    if cint(mid(dato,4,2)) >= 1 and cint(mid(dato,4,2)) <= 12 then
      if isnumeric(right(dato,4)) then
      if mid(dato,3,1) = "-" and mid(dato,6,1) = "-" then
        if isDate(dato) then
        returVal = true
        end if
      end if
      end if
    end if
    end if
  end if
  end if
end if
MyIsDate = returVal
end function
Avatar billede carl_erik Nybegynder
23. februar 2005 - 11:46 #8
Alt det for en dato?????
Hvorfor bruker du ikke bare:

    'Default værdi "1 jan 1900"

???
Avatar billede fennec Nybegynder
23. februar 2005 - 12:18 #9
Der skal mange ting til at tjekke om en dato er rigtig. Det skal jo være en gyldig dato. Man kommer dog et vis stykke med den indbyggede IsDate() funktion, men den har en fejl:
isDate("01-31-2004")
isDate("31-01-2004")
Returnere nemlig begge true, fordi den arbejder med mm-dd-yyyy og dd-mm-yyyy formaterne. Derfor har jeg lavet min egen MyIsDate() funktion.

MyIsDate er altså til at tjekke om datoen er gyldig og ConvertToSqlDate() omdanner dd-mm-yyyy formatet til yyyymmdd med 19000101 som default/error returværdi.
Avatar billede carl_erik Nybegynder
23. februar 2005 - 12:22 #10
BRA!

Svar?
Avatar billede fennec Nybegynder
23. februar 2005 - 12:41 #11
.o) <-- OneEyed Jack
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