Avatar billede websam Nybegynder
22. maj 2005 - 20:25 Der er 49 kommentarer og
1 løsning

Sikkerhed ved upload ?

hejsa,

Jeg ville lige hvad sikkerheden er ved upload igennem .net platformen. Her tænker jeg på at hvis men har et modul hvor folk kan uploade .pdf filer og tjekker på at Left(file.postedfile.filename, 3) skal være lig med pdf kan folk så ikke bare omdøbe en skadelig .exe fil til .pdf og så uploade filen anyway ?

Findes der noget som rent faktisk tjekker på om indholdet af filen rent faktisk er en .pdf noget si stil med file.postedfile.contenttype ?

Nogen ideer der ?

/Websam
Avatar billede arne_v Ekspert
22. maj 2005 - 20:28 #1
Læs de første 4 bytes.

Hvis det er en PDF fil så skal de være "%PDF".
Avatar billede websam Nybegynder
22. maj 2005 - 20:33 #2
kan du uddybe det en smule og gerne i vb.net
Avatar billede websam Nybegynder
22. maj 2005 - 20:44 #3
der må jo være noget jeg skal tjekke op imod ala file.postedfile.etellernadet = "%pdf", men hvad skal der til istedet for "etellernadet" ?
Avatar billede nielle Nybegynder
22. maj 2005 - 20:47 #4
Som arne_v skriver. Men derudover vil jeg da gerne påpege at:

1) Selv om det er en malware .exe, .com, .dll (eller anden ekstension) -fil, og den omdøbes til .pdf så kan den ikke efterfølgende afvikles af den grund.

2) Den skulle i givet fald omdøbes tilbage til .exe for at fungere og dette ville kræve at would-be hackeren skal have adgang til at omdøbe filer på serveren.

3) Hvis hackeren er i stand til dette, så er sikkerheden allerede kompromitteret alene af den grund, og så er det lidt lige meget at bekymre sig om en pdf/exe-fil kan omdøbes.

4) Selv hvis det skulle kunne lade sig gøre at omgå punkterne 1-3, så skal filen også eksekveres for at kunne lave sit snavs. Det er ikke nok at filen ligger på serveren. Hvis hackeren kan eksekvere filen, eller han kan lokke andre til at gøre det for sig, så er sikkerheden endnu mere kompromitteret end under punkt 3.
Avatar billede arne_v Ekspert
22. maj 2005 - 20:48 #5
Dim fs As FileStream = New FileStream("C:\z.pdf", FileMode.Open, FileAccess.Read)
        Dim b(3) As Byte
        fs.Read(b, 0, b.Length)
        fs.Close
        Dim hdr As String = Encoding.Default.GetString(b, 0, b.Length)
        Dim pdf As Boolean = hdr.Equals("%PDF")
Avatar billede arne_v Ekspert
22. maj 2005 - 20:49 #6
erstat C:\z.pdf med navnet på din fil
Avatar billede arne_v Ekspert
22. maj 2005 - 20:56 #7
nielle>

sikkerheds risikoen for serveren må være nul uanset hvad

pointen må være at beskytte dem som downloader filen
Avatar billede nielle Nybegynder
22. maj 2005 - 21:03 #8
Heller ikke hvis en bruger downloader den omdøbte .exe -> .pdf fil, så ville der ikke være fare for vedkommende med mindre at filen aktivt - af brugeren - blev omdøbt tilbage til .exe.
Avatar billede arne_v Ekspert
22. maj 2005 - 21:07 #9
rigtigt - men der er mange brugere som ville kunne narres til det
Avatar billede arne_v Ekspert
22. maj 2005 - 21:08 #10
jeg ved heller ikke om jeg ville checke på det (nogle brugere er bare
umulige at beskytte), men nu spurgte websam om man kunne
Avatar billede websam Nybegynder
22. maj 2005 - 21:16 #11
Jeg vil bare ikke sidde og lave en løsning for en kunde og så lave noget halvt færdigt derfor kan jeg lige så godt tjekke op på det så har jeg mit på det tørre hvis der skulle komme nogte senere hen :o)

arne >> Nu kan jeg se du skriver :

Dim fs As FileStream = New FileStream("C:\z.pdf", FileMode.Open, FileAccess.Read)

Kunne det ikke være :

Dim fs As FileStream = New FileStream(File.PostetFile.Filename, FileMode.Open, FileAccess.Read)

Da jeg jo vil tjekke op på det inden filen uploades ?

Og noget i denne stil hvis jeg laver det som en function ? :

Public Shared Function chkFileByte(ByVal strFile As String)
    Dim fs As FileStream = New FileStream(strFile, FileMode.Open, FileAccess.Read)
    Dim b(3) As Byte
    fs.Read(b, 0, b.Length)
    fs.Close
    Dim hdr As String = Encoding.Default.GetString(b, 0, b.Length)
    Dim pdf As Boolean = hdr.Equals("%PDF")
End Function

/Websam
Avatar billede nielle Nybegynder
22. maj 2005 - 21:18 #12
Jeg synes nu ikke at det fremgik helt klar af spørgsmålet hvem eller hvad det var som skulle beskyttes. Brugerne af sitet blev dog ikke nævnt - andet end i deres aggressive rolle som potentiel hacker.
Avatar billede websam Nybegynder
22. maj 2005 - 21:18 #13
Eller kan jeg først gøre det når filen ligger på selve serveren ?

/Websam
Avatar billede websam Nybegynder
22. maj 2005 - 21:20 #14
Nielle >> nej det gjorde det heller ikke, for hvis jeg bare forhindre det igennem koden opstår problemet aldrig :o)

/Websam
Avatar billede nielle Nybegynder
22. maj 2005 - 21:21 #15
websam> Hvis du vil beskyttet sitet imod onde hensigter så skulle du helt klar hellere bekymre dig om emner som SQL-injection og cross-site scripting i stedet.
Avatar billede arne_v Ekspert
22. maj 2005 - 21:23 #16
jo det kan du sagtens

(bemærk dog at det er efter at filen er uploadet men før filen flyttes
til sin endelige desitnation)
Avatar billede websam Nybegynder
22. maj 2005 - 21:34 #17
ja det er jeg med på upload > check > slet eller gem :o) Jeg forsøger mig frem og vender tilbage med resultatet :o) og det er File.PostetFile.FileName Eller ?

/Websam
Avatar billede arne_v Ekspert
22. maj 2005 - 21:37 #18
hvis du vil checke inden final destination - hvilket lyder logisk
Avatar billede websam Nybegynder
22. maj 2005 - 21:39 #19
Cool jeg prøver :o)

/Websam
Avatar billede burningice Nybegynder
23. maj 2005 - 10:24 #20
nej, man kan ikke bruge FileName til at åbne en filestream, da den givne fil ikke findes fysisk nogen steder..

du skal istedet læse fra PostedFile.InputStream
Avatar billede arne_v Ekspert
24. juli 2005 - 17:02 #21
all set ?
Avatar billede websam Nybegynder
26. juli 2005 - 08:58 #22
Jeg har haft lidt meget om ørene den seneste tid, men jeg skal nok få kigget det igennem, så vender jeg tilbage senere med resultatet :o)

/Websam
Avatar billede nielle Nybegynder
12. august 2005 - 09:41 #23
Lukketid?
Avatar billede websam Nybegynder
25. august 2005 - 13:00 #24
Så har jeg lidt tid til at kigge på det :o)

Jeg skal lige høre hvad min Imports skal være til denne :

Encoding.Default.GetString(b, 0, b.Length)

eller er der noget jeg misser ?

/Websam
Avatar billede websam Nybegynder
25. august 2005 - 13:01 #25
Da encoding kommer med fejl :

Name 'Encoding' is not declared
Avatar billede arne_v Ekspert
25. august 2005 - 13:03 #26
System.Text

tror jeg
Avatar billede websam Nybegynder
25. august 2005 - 13:06 #27
det var det
Avatar billede websam Nybegynder
25. august 2005 - 13:22 #28
Ok så kommer der lige lidt mere jeg tester lige pt med dette :

Response.Write(objMediaBiz.chkFileByte(txt_IconUpload.PostedFile.InputStream))

Som referer til denne function :

Public Function chkFileByte(ByVal strFile As )
        Dim fs As FileStream = New FileStream(strFile, FileMode.Open, FileAccess.Read)
        Dim b(3) As Byte
        fs.Read(b, 0, b.Length)
        fs.Close()
        Dim hdr As String = Encoding.Default.GetString(b, 0, b.Length)
        Dim pdf As Boolean = hdr.Equals("%PDF")
        Return pdf
    End Function

men hvad skal jeg have efter as i denne :

ByVal strFile As ????

/websam
Avatar billede arne_v Ekspert
25. august 2005 - 13:24 #29
String

vil jeg tro
Avatar billede websam Nybegynder
25. august 2005 - 13:27 #30
Nej for den giver dette :

Value of type 'System.IO.Stream' cannot be converted to 'String'.
Avatar billede arne_v Ekspert
25. august 2005 - 13:33 #31
Public Function chkFileByte(ByVal fs As Stream)
        Dim b(3) As Byte
        fs.Read(b, 0, b.Length)
        Dim hdr As String = Encoding.Default.GetString(b, 0, b.Length)
        Dim pdf As Boolean = hdr.Equals("%PDF")
        Return pdf
    End Function
Avatar billede websam Nybegynder
25. august 2005 - 14:22 #32
Det gav det ønskede resultat, tak for hjælpen ;o)

/Websam
Avatar billede arne_v Ekspert
25. august 2005 - 14:25 #33
check lige at de 3 bytes ikke mangler i filen fordi vi har læst dem her !!!
Avatar billede websam Nybegynder
25. august 2005 - 14:26 #34
Hvad mener du ?
Avatar billede arne_v Ekspert
25. august 2005 - 14:29 #35
vi læser 3 byte her

jeg blev lige bange for om de manglede i filen så

(det afhænger af hhvor du kalder den i upload processen)
Avatar billede websam Nybegynder
25. august 2005 - 14:33 #36
Det gør jeg som det første inden jeg foretager mig andet !?!

/Websam
Avatar billede websam Nybegynder
25. august 2005 - 14:36 #37
eller nærmere forstået ved button klik laver jeg en :

If Not objMediaBiz.chkFileByte(txt_IconUpload.PostedFile.InputStream) Then
  '--- filen må ikke gemmes
Else
  '--- filen må gerne gemmes
End If
Avatar billede arne_v Ekspert
25. august 2005 - 14:41 #38
hvis de 3 byte mangler så kalder du bare

fs.Seek(0, SeekOrigin.Begin);

efter at have læst de 3 byte for at spole tilbage
Avatar billede websam Nybegynder
25. august 2005 - 14:46 #39
ok så skal jeg jo have lagt det ind efter opload og ikke som det første
Avatar billede websam Nybegynder
25. august 2005 - 22:43 #40
Og så lige den sidste ting vil følgende fil formater så skulle oversættes til :

.jpg = %JPG
.gif = %GIF
.png = %PNG
.doc = %DOC
.xls = %XLS

eller er jeg helt galt på den der ???

/Websam
Avatar billede arne_v Ekspert
25. august 2005 - 22:45 #41
ja - de har sandsyneligvis en anden form for header
Avatar billede arne_v Ekspert
25. august 2005 - 22:46 #42
NB: ovenfor snakker jeg om 3 byte - det er jo faktisk 4 byte
Avatar billede websam Nybegynder
25. august 2005 - 22:48 #43
Hvad mener du med en anden header ?

Og så skal det være :

Dim b(4) As Byte

istedet for :

Dim b(3) As Byte

eller ?

/Websam
Avatar billede arne_v Ekspert
25. august 2005 - 22:51 #44
at hver fil har et forskelligt indhol i starten (header)

----

nej

Dim b(3) As Byte

er jo netop 4 byte (index 0 1 2 3)
Avatar billede websam Nybegynder
25. august 2005 - 22:53 #45
Ok det vil sige at jeg ikke kan være 100 % sikker på at det er :

.jpg = %JPG
.gif = %GIF
.png = %PNG
.doc = %DOC
.xls = %XLS

der er det rigtige ?

/Websam
Avatar billede arne_v Ekspert
25. august 2005 - 22:54 #46
du kan være 98% sikker på at det *IKKE* er tilfældet

BMP bruger f.eks 2 byte med værdien 0x4D42 i starten
Avatar billede arne_v Ekspert
25. august 2005 - 22:55 #47
GIF indeholde "GIF" i de første 3 byte
Avatar billede arne_v Ekspert
25. august 2005 - 23:01 #48
de første 8 byte af en PNG fil er

137 80 78 71 13 10 26 10
Avatar billede websam Nybegynder
25. august 2005 - 23:05 #49
Er der nogle steder på nettet hvor jeg kan finde de rette headere til de omtalte filer så ?
Avatar billede arne_v Ekspert
25. august 2005 - 23:07 #50
du er nødt til at google efter beskrivelser af formaterne og læse dem
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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