Avatar billede mini-me Nybegynder
29. marts 2005 - 15:04 Der er 21 kommentarer og
1 løsning

FSO Sikkerhed

Hej Eksperter,

JEg har lavet et filarkiv, hvor jeg henter den mappe der skal bruges fra en Querystring, dernæst smider jeg det ind i server.mappath som formidler det til min FSO.

Problemet er bare at hvis jeg i min querystring tilføjer "../../" så kan jeg få fat i mine system filer m.v.

Hvordan kan jeg lukke dette hul ?
Avatar billede moejensen Nybegynder
29. marts 2005 - 15:10 #1
sikre dig at IUSR_SERVERNAVN ikke har nogen rettigheder til andre mapper en den mappe hvor din webside ligger i
Avatar billede moejensen Nybegynder
29. marts 2005 - 15:11 #2
det er aldrig smart at give brugeren mulighed for at rette i en sti der skal eksekveres på serveren, ved at overføre stien i en url.
Avatar billede mini-me Nybegynder
29. marts 2005 - 15:12 #3
Hmmm andre metoder? Det med give IUsr rettigheder virker ikke da han/hun kun har lov at se denne mappe men ikke de kildefiler som hoster websitet...
Avatar billede mortency Nybegynder
29. marts 2005 - 15:12 #4
Du kan bare lave en replace som sjekker de 3 første tegn hvis du ikke skal lenger opp en et nivå.

Eller du skal alle hente fra spesifikke mapper eller en mappe? Ligger alle på samme nivå?

//Morten

Smid litt kode....
Avatar billede mini-me Nybegynder
29. marts 2005 - 15:14 #5
Nej de ligger ikke på samme niveau :

Min kode

rootpath = server.MapPath("../../../fileFolder/")
    level = 0
    strCounter = 0
    sub getPath(strPath,level,ParentFolder)
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set MainFolder = fso.GetFolder(strPath)
        Set Files = MainFolder.Files
        Set Folders = MainFolder.subfolders

        For Each Folder in Folders
           
            if ParentFolder <> "" then
            imagePath = parentFolder & "/" & folder.name & "/"
            else
            imagePath = folder.name & "/"
            end if
           
           
            for a = 1 to level
              siteLevel = siteLevel + 1
            next
         
            strCounter = strCounter + 1
           
            response.Write("d.add(" & StrCounter & "," & level &",'" & Folder.NAme & "','show_fileSystem.asp?Folder=" & imagePath & "');"  & vbCrlf)
           
            call getPath(strPath & "\" & lcase(folder.name),level+1,lcase(folder.name))
           
        next

     
        set fsObj = Nothing
        set MainFolder = Nothing
    end sub
   
   
    call getPath(rootpath,level,StartPath)
   
%>
Avatar billede moejensen Nybegynder
29. marts 2005 - 15:18 #6
hvordan ser din Querystring ud?
Avatar billede mini-me Nybegynder
29. marts 2005 - 15:20 #7
eks. : folder=billeder/Familie/
Avatar billede moejensen Nybegynder
29. marts 2005 - 15:26 #8
så kan du ex gøre følgende

If instr(Request.Querystring("bla"),"/") = 0 Then
  Response.write("Der er fejl i url'en")
Else
  kør din kode
End If
Avatar billede mini-me Nybegynder
29. marts 2005 - 15:28 #9
nope hvis jeg så i min quersystring skriver :Folder=../ så får jeg stadig adgang til underliggende mapper + filer
Avatar billede mini-me Nybegynder
29. marts 2005 - 15:29 #10
Man skal vel sammenligne mit udgangspunkt med min querystring hvis den mappe jeg søger i min qyerstring ligger uden for min rootPath skla man nægtes adangag
Avatar billede mini-me Nybegynder
29. marts 2005 - 15:29 #11
undskyld mine stavefejl, har fået nyt keyboard og skal lige have det tilpasset ;-) Når man kommer fra et MS Nautral knæk keyboard til et notebook keyboard så vil man lave en del slåfejl :)
Avatar billede mortency Nybegynder
29. marts 2005 - 15:30 #12
DinString = Replace(Request.Querystring("DINQUERYSTRING"), "../", "")
Avatar billede moejensen Nybegynder
29. marts 2005 - 15:32 #13
overordnede virker det som om der er noget helt galt med sikkerheden på din server, hvis der ikke skal mere til at du kan nå system filerne fra en asp side.

prøv med

If instr(Request.Querystring("bla"),"/") = 0 OR instr(Request.Querystring("bla"),"./") = 0 OR instr(Request.Querystring("bla"),"../") = 0 Then
  Response.write("Der er fejl i url'en")
Else
  kør din kode
End If

Det er de tre muligheder der er for at komme en folder ellere flere ud
Avatar billede moejensen Nybegynder
29. marts 2005 - 15:34 #14
hvis du bruger denne måde, skal du også replace følgende:

DinString = Replace(Request.Querystring("DINQUERYSTRING"), "/", "")
DinString = Replace(Request.Querystring("DINQUERYSTRING"), "./", "")
Avatar billede mini-me Nybegynder
29. marts 2005 - 15:36 #15
Hmmm jeg sidder og tester internet på min egen webserver.. kan godt være derfor.

Rækker sikkerheden med at undersøge de 3 muligheder der?
Avatar billede mortency Nybegynder
29. marts 2005 - 15:36 #16
folder = Request.QueryString("Folder")
folder = Replace(folder, "../", "")

rootpath = server.MapPath("../../../fileFolder/")
    level = 0
    strCounter = 0
    sub getPath(strPath,level,ParentFolder)
        Set fso = CreateObject("Scripting.FileSystemObject")
        Set MainFolder = fso.GetFolder(strPath)
        Set Files = MainFolder.Files
        Set Folders = MainFolder.subfolders

        For Each Folder in Folders
           
            if ParentFolder <> "" then
            imagePath = parentFolder & "/" & folder.name & "/"
            else
            imagePath = folder.name & "/"
            end if
           
           
            for a = 1 to level
              siteLevel = siteLevel + 1
            next
         
            strCounter = strCounter + 1
           
            response.Write("d.add(" & StrCounter & "," & level &",'" & Folder.NAme & "','show_fileSystem.asp?Folder=" & imagePath & "');"  & vbCrlf)
           
            call getPath(strPath & "\" & lcase(folder.name),level+1,lcase(folder.name))
           
        next

     
        set fsObj = Nothing
        set MainFolder = Nothing
    end sub
   
   
    call getPath(rootpath,level,StartPath)
   
%>
Avatar billede mini-me Nybegynder
29. marts 2005 - 15:44 #17
Moejensen, lige gyldigt hvad jeg gør så får jeg afvide at der er fejl i url hvis jeg benytter det sidste du kom med... så kan jeg få lov at se nada :-)
Avatar billede mini-me Nybegynder
29. marts 2005 - 15:45 #18
Moejsen hvis jeg benytter dine replace går det jeg helt galt da brugeren har mulighed for at se /billeder/upperfolder
Avatar billede moejensen Nybegynder
29. marts 2005 - 16:20 #19
prøv at undlad denne her:

DinString = Replace(Request.Querystring("DINQUERYSTRING"), "/", "")

den sender alligevel kun brugeren ud ti lrooden af din webfoler.

men problemet skulle gerne klares automatisk når du ligger det på dit webhotel.
Avatar billede mini-me Nybegynder
19. april 2005 - 10:50 #20
Der er blevet brugt lidt at hvert, så hvis i alle smider et svar så deler jeg point.
Avatar billede mini-me Nybegynder
19. maj 2005 - 11:50 #21
Ingen der vil smide et svar ?;)
Avatar billede mini-me Nybegynder
20. september 2005 - 13:09 #22
lukker
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