webForumDet fria alternativet

kolla filtyp (ej bara filändelse)

20 svar · 594 visningar · startad av Qonos

QonosMedlem sedan sep. 2000438 inlägg
#1

Med ett upload form är det ju hyffsat lätt att kolla vad en fil lhar för filändelse. MEN vad är det som säger att de inte döpt om en .exe fil till .gif?

Finns det något sätt att "gå in i filen" och kolla vad det är för typ av fil så man är riktigt säker på att det t.ex. bara är en gif, jpg eller png fil? eller i andra fall t.ex. pdf, txt, doc, sxc.

MatteMedlem sedan aug. 20002 975 inlägg
#2

I $_FILES['userfile']['type'], där 'userfile' är namnet på file-fältet i formuläret, hittar du mime-typen.

För bildfiler är mimetyperna
GIF: image/gif
JPEG: image/jpeg eller image/pjpeg
PNG: image/png eller image/x-png

Övriga får du väl ladda upp för att kolla.

QonosMedlem sedan sep. 2000438 inlägg
#3

ahh oki så dom är "säkra" dom går inte att modifiera genom att bara byta filändelse på? fungerar de även från personer på MAC som inte vet vad filändelse är för något?

MatteMedlem sedan aug. 20002 975 inlägg
#4

Dom går inte att ändra på genom att byta filändelse eller liknande, men om mime-typerna är exakt desamma från en Mac har jag ingen aning om, men bildformaten antar jag är det.

Är det bara bilder det handlar om skulle det även gå att använda getimagesize på $_FILES['userfile']['tmp_name'].

Då kan du i element 2 i arrayen få fram filtypen.

QonosMedlem sedan sep. 2000438 inlägg
#5

tackar!

UlfTMedlem sedan maj 20018 027 inlägg
#6

Mime-typerna är likadana i alla operativ-system. Frågan är väl vad det har för betydelse i det här fallet. Här var väl poängen att ladda upp filer till en server (upload form). Men mime-typer är något som kommer med filerna till exempelvis en web-browser för att tala om för browsern vad det är för fil. Vilken mime-typ som anges, konfigurerar man i web-servern, och den brukar normalt gå på filsuffix.

MatteMedlem sedan aug. 20002 975 inlägg
#7

Ändrar du filändelsen på en JPEG till 'gif' så kommer den ändå att vara en JPEG i $_FILES['userfile']['type'].
Så jag förmodar att webbläsaren inte går på filändelse.

UlfTMedlem sedan maj 20018 027 inlägg
#8

Matte skrev:

Ändrar du filändelsen på en JPEG till 'gif' så kommer den ändå att vara en JPEG i $_FILES['userfile']['type'].
Så jag förmodar att webbläsaren inte går på filändelse.

Web-läsaren, nej. Men vilken mime-typ skickar web-servern?

QonosMedlem sedan sep. 2000438 inlägg
#9

hmm så vad som sägs här är att jag skall kolla $_FILES['userfile']['type'] och sen bygga en funktion som plockar ut rätt filändelse åt filtypen för att vara säker på att rätt fil har rätt ändelse?

QonosMedlem sedan sep. 2000438 inlägg
#10

UlfT skrev:

Web-läsaren, nej. Men vilken mime-typ skickar web-servern?

Men alla webservrar lär väl skicka rätt mime till rätt typ av fil?

UlfTMedlem sedan maj 20018 027 inlägg
#11

Qonos skrev:

UlfT skrev:

Web-läsaren, nej. Men vilken mime-typ skickar web-servern?

Men alla webservrar lär väl skicka rätt mime till rätt typ av fil?

Om man konfigurerar dem rätt, ja. Och denna konfigurering brukar utgå från filsuffix. Givetvis går det att göra saker själv också. Du skulle ju kunna göra ett php-script, vars output är en gif-bild. Då får php-scriptet börja med att skicka mime-typen image/gif så att browsern förstår vad det är den tar emot.

Vad jag närmast funderar på, är om mime-typen verkligen skulle kunna hjälpa dig med att kolla om en gif-fil verkligen är en gif-fil, och inte en exe-fil som någon har bytt suffix på.

QonosMedlem sedan sep. 2000438 inlägg
#12

hmm men seriösa webhotel bör ju ha det vettigt konfigurerat, tycker man, eller? :)

UlfTMedlem sedan maj 20018 027 inlägg
#13

Qonos skrev:

hmm men seriösa webhotel bör ju ha det vettigt konfigurerat, tycker man, eller? :)

Det har de säkert. Men vad är det du ska göra? Så som jag förstår dig, ska du ladda upp en fil. Vilken mime-typ får den filen? Hur vet webhotellet att filen med suffixet gif som trillar in, egentligen inte är en gif? Om det i själva verket är en exe, vilket program i kedjan satte då den mime-typ som säger att det inte är en gif?

MatteMedlem sedan aug. 20002 975 inlägg
#14

UlfT skrev:

Web-läsaren, nej. Men vilken mime-typ skickar web-servern?

Nu förstår jag inte.

Webbservern skickar inget, den tar emot.
Och det den tar emot är, om jag förstått rätt, mime-typen den får av webbläsaren.
Den mime-typen bygger inte, vad jag hitills sett, på filändelse.

Och när man visar den uppladdade filen på webbservern sedan så kommer den att visa rätt mime-typ, åtminstone när det gäller bilder, så långt min erfarenhet räcker.
Har aldrig varit med om att det inte stämt, men har å andrasidan inga större kunskaper om webbservrar.

Personligen brukar jag kolla mime-typen på en uppladdad bild, och stämmer inte mime-type lägger jag till rätt filändelse i slutet av filnamnet.

QonosMedlem sedan sep. 2000438 inlägg
#15

jag skall bara kolla så att folk inte laddar upp filer de inte får.. och killen på webhotelet sa att jag kan använda mime grejen

"Jodå, de skall nog vara lugnt. :)"

UlfTMedlem sedan maj 20018 027 inlägg
#16

Matte skrev:

UlfT skrev:

Web-läsaren, nej. Men vilken mime-typ skickar web-servern?

Nu förstår jag inte.

Webbservern skickar inget, den tar emot.

Vi är inne i flera olika skeenden här. När du surfar in på en sida, då är det web-servern som skickar en mime-typ. Exakt vilken mime-typ som web-servern skickar, avgörs av hur web-servern är konfigurerad. Apache tex, kan konfigureras med följande direktiv:

AddType image/gif .gif

Som du ser, kopplar apache mime-typen till filsuffixet.

Matte skrev:

Och det den tar emot är, om jag förstått rätt, mime-typen den får av webbläsaren.
Den mime-typen bygger inte, vad jag hitills sett, på filändelse.

Vad bygger den mime-typen på i så fall? Något måste det ju vara som gör att web-läsaren skickar med rätt mime-typ.

MatteMedlem sedan aug. 20002 975 inlägg
#17

UlfT skrev:

Vad bygger den mime-typen på i så fall? Något måste det ju vara som gör att web-läsaren skickar med rätt mime-typ.

Ingen som helst aning.
Kan bara konstatera att oberoende vilken filändelse jag er en fil så får jag rätt mime-typ i mitt skript.

Jag gjorde en test.
Jag bytte namn på en GIF-fil till ändelse 'jpg'.
När jag laddade upp den hade den enligt php mimetypen image/gif.
Tog fram den på skärmen och sparade den. När jag skulle ladda upp den igen så sa PHP att det fortfarande var en GIF.
Detta i IE6.

MEN och ett stort MEN.
Efter jag skrivit ovanstående gjorde jag om samma test med Mozilla och sedemera Opera och fann att det vid uppladdningen sa att det var en JPEG!!

Så det jag har sagt tidigare gäller endast för IE, och en något sånär säker kontroll kan inte göras gentemot mime-type!!

Så jag får be om ursäkt för mina tidigare så säkra påstående :r

För bilder kan man dock använda getimagesize för att kolla filtypen. Den läser ur filen för att identifiera typen.

UlfTMedlem sedan maj 20018 027 inlägg
#18

Matte skrev:

För bilder kan man dock använda getimagesize för att kolla filtypen. Den läser ur filen för att identifiera typen.

Det håller jag med om. Varje bildfilstyp har ju dessutom sitt eget sätt för att ange storlek, så skulle man läsa storleken på en fil av fel typ, skulle man bara få skräpvärden. :)

MatteMedlem sedan aug. 20002 975 inlägg
#19

Det är t.o.m. så att getimagesize returnerar false om det inte är en för getimagesize giltig filtyp.

getimagesize returnerar även en del mer än storleken, t.ex. filtyp, både som ett heltal och som mimetyp.

QonosMedlem sedan sep. 2000438 inlägg
#20

så med andra ord går det inte att vara helt säker på vilken filtyp användaren försöker ladda upp?

130 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)