Hallo,
In een uploadbestand gebruik ik het volgende om bestandstype en -grootte
te controleren
if (($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
&& ($_FILES["file"]["size"] < 250000))
{
hier het een en ander
}
Werkte prima in FF, maar IE7 pikt het niet, er wordt niets ge-upload.
Als ik controle op type eruit haal, dus:
if ($_FILES["file"]["size"] < 250000)
{
hier het een en ander
}
dan werkt het wel in IE7.
Iemand een idee waarom dat is en hoe ik toch kan controleren op type?
Rob
Evenementen voor de komende 60 Dag(en)
Resultaten 1 tot 15 van de 37
Onderwerp: upload controleren op type (php)
-
upload controleren op type (php)
-
Re: upload controleren op type (php)
Rob wrote:
> In een uploadbestand gebruik ik het volgende om bestandstype en
> -grootte te controleren
> if (($_FILES["file"]["type"] == "image/gif")
>>> ($_FILES["file"]["type"] == "image/jpeg")
> && ($_FILES["file"]["size"] < 250000))
> {
> hier het een en ander
> }
Moet dat niet zijn:
if (($_FILES["file"]["type"] == "image/gif") || ($_FILES["file"]["type"] ==
"image/jpeg")) && ($_FILES["file"]["size"] < 250000)) {..}
--
Nico
-
Re: upload controleren op type (php)
On Sun, 17 Aug 2008 22:36:39 +0200, Rob <nospam@plea.se> wrote:
>
> Hallo,
>
> In een uploadbestand gebruik ik het volgende om bestandstype en -grootte
> te controleren
>
> if (($_FILES["file"]["type"] == "image/gif")
> || ($_FILES["file"]["type"] == "image/jpeg")
> && ($_FILES["file"]["size"] < 250000))
> {
> hier het een en ander
> }
>
> Werkte prima in FF, maar IE7 pikt het niet, er wordt niets ge-upload.
>
>
> Als ik controle op type eruit haal, dus:
>
> if ($_FILES["file"]["size"] < 250000)
> {
> hier het een en ander
> }
>
> dan werkt het wel in IE7.
>
> Iemand een idee waarom dat is en hoe ik toch kan controleren op type?
Waarschijnlijk zegt MSIE wat anders (n.a.w. 'image/x-jpeg' o.i.d.), wat je
natuurlijk makkelijk kunt controleren door de $_FILES array te dumpen en
te controleren. Verder is dit een 'user-supplied' waarde, ofwel: totaal
onbetrouwbaar. Ik kan als ik dat wil best wel een nare executable uploaden
en beweren dat het een jpeg is.
Om te controleren of iets een plaatje is (waar ik wat mee kan) gebruik ik
normaal de GD functie getimagesize(): relatief laag resource gebruik, en
je weet zeker dat je het als plaatje kunt interpreteren:
if((getimagesize($_FILES['file']['tmp_name']!==false) &&
$_FILES["file"]["size"] < 250000){
//doe je ding
}
--
Rik Wasmus
-
Re: upload controleren op type (php)
Rik Wasmus wrote:
[Testen met if ($_FILES["file"]["type"] == "image/jpeg") e.d.]
> ... Verder is dit een 'user-supplied' waarde,
> ofwel: totaal onbetrouwbaar. Ik kan als ik dat wil best wel een nare
> executable uploaden en beweren dat het een jpeg is.
Dat is teleurstellend! Ik heb altijd gedacht dat het een controle op de
header van het bestand was.
Betekent dit dat je net zo goed de extensie kunt controleren?
--
Nico
-
Re: upload controleren op type (php)
Nico Schuyt schreef:
> [Testen met if ($_FILES["file"]["type"] == "image/jpeg") e.d.]
>
>> ... Verder is dit een 'user-supplied' waarde, ofwel: totaal
>> onbetrouwbaar. Ik kan als ik dat wil best wel een nare executable
>> uploaden en beweren dat het een jpeg is.
>
> Dat is teleurstellend! Ik heb altijd gedacht dat het een controle op
> de header van het bestand was.
Ook die valt theoretisch te manipuleren, meen ik.
> Betekent dit dat je net zo goed de extensie kunt controleren?
Theoretisch gezien wel, aangezien zowel met de headers als de extensie
van een bestand gerommeld kan zijn. Even de afmetingen van een bestand
opvragen middels de GD-functie getimagesize() lijkt me dus de beste
oplossing.
--
Groet,
Maarten Wierda
-
Re: upload controleren op type (php)
Maarten Wierda wrote:
> Nico Schuyt schreef:
>> [Testen met if ($_FILES["file"]["type"] == "image/jpeg") e.d.]
>>> ... Verder is dit een 'user-supplied' waarde, ofwel: totaal
>>> onbetrouwbaar. Ik kan als ik dat wil best wel een nare executable
>>> uploaden en beweren dat het een jpeg is.
>> Dat is teleurstellend! Ik heb altijd gedacht dat het een controle op
>> de header van het bestand was.
> Ook die valt theoretisch te manipuleren, meen ik.
>> Betekent dit dat je net zo goed de extensie kunt controleren?
> Theoretisch gezien wel, aangezien zowel met de headers als de extensie
> van een bestand gerommeld kan zijn. Even de afmetingen van een bestand
> opvragen middels de GD-functie getimagesize() lijkt me dus de beste
> oplossing.
Bedankt! Blijft nog wel (het minder belangrijke) punt over om te bepalen wat
het type image is.
--
Nico
-
Re: upload controleren op type (php)
Nico Schuyt schreef:
>>> [Testen met if ($_FILES["file"]["type"] == "image/jpeg") e.d.]
>
>>>> ... Verder is dit een 'user-supplied' waarde, ofwel: totaal
>>>> onbetrouwbaar. Ik kan als ik dat wil best wel een nare
>>>> executable uploaden en beweren dat het een jpeg is.
>
>>> Dat is teleurstellend! Ik heb altijd gedacht dat het een controle
>>> op de header van het bestand was.
>
>> Ook die valt theoretisch te manipuleren, meen ik.
>
>>> Betekent dit dat je net zo goed de extensie kunt controleren?
>
>> Theoretisch gezien wel, aangezien zowel met de headers als de
>> extensie van een bestand gerommeld kan zijn. Even de afmetingen van
>> een bestand opvragen middels de GD-functie getimagesize() lijkt me
>> dus de beste oplossing.
>
> Bedankt! Blijft nog wel (het minder belangrijke) punt over om te
> bepalen wat het type image is.
Wellicht een combinatie van getimagesize() + een check op de headers?
--
Groet,
Maarten Wierda
-
Re: upload controleren op type (php)
Maarten Wierda wrote:
> Nico Schuyt schreef:
>
>>>> [Testen met if ($_FILES["file"]["type"] == "image/jpeg") e.d.]
>>
>>>>> ... Verder is dit een 'user-supplied' waarde, ofwel: totaal
>>>>> onbetrouwbaar. Ik kan als ik dat wil best wel een nare
>>>>> executable uploaden en beweren dat het een jpeg is.
>>
>>>> Dat is teleurstellend! Ik heb altijd gedacht dat het een controle
>>>> op de header van het bestand was.
>>
>>> Ook die valt theoretisch te manipuleren, meen ik.
>>
>>>> Betekent dit dat je net zo goed de extensie kunt controleren?
>>
>>> Theoretisch gezien wel, aangezien zowel met de headers als de
>>> extensie van een bestand gerommeld kan zijn. Even de afmetingen van
>>> een bestand opvragen middels de GD-functie getimagesize() lijkt me
>>> dus de beste oplossing.
>>
>> Bedankt! Blijft nog wel (het minder belangrijke) punt over om te
>> bepalen wat het type image is.
>
> Wellicht een combinatie van getimagesize() + een check op de headers?
Wordt dat een variant op:
$imageinfo = getimagesize($_FILES['userfile']['tmp_name']);
if($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg')
{
echo "Sorry, we only accept GIF and JPEG images\n";
exit;
}
http://www.scanit.be/uploads/php-file-upload.pdf
--
Nico
-
Re: upload controleren op type (php)
Op Mon, 18 Aug 2008 10:36:27 +0200 schreef Rik Wasmus
<luiheidsgoeroe@hotmail.com>:
> On Sun, 17 Aug 2008 22:36:39 +0200, Rob <nospam@plea.se> wrote:
>
>> if (($_FILES["file"]["type"] == "image/gif")
>> || ($_FILES["file"]["type"] == "image/jpeg")
>
>
> Waarschijnlijk zegt MSIE wat anders (n.a.w. 'image/x-jpeg' o.i.d.), wat
[snip]
image/pjpeg, om precies te zijn.
> Om te controleren of iets een plaatje is (waar ik wat mee kan) gebruik
> ik normaal de GD functie getimagesize(): relatief laag resource gebruik,
> en je weet zeker dat je het als plaatje kunt interpreteren:
Nog een pedante opmerking: getimagesize() werkt ook zonder de GD-bieb.
--
Ronald
-
Re: upload controleren op type (php)
Ronald Klip schreef:
> Nog een pedante opmerking: getimagesize() werkt ook zonder de
> GD-bieb.
Ah, tuurlijk!
--
Groet,
Maarten Wierda
-
Re: upload controleren op type (php)
On Mon, 18 Aug 2008 12:56:20 +0200, Ronald Klip
<nieuws@contentecontent.invalid> wrote:
> Op Mon, 18 Aug 2008 10:36:27 +0200 schreef Rik Wasmus
> <luiheidsgoeroe@hotmail.com>:
>
>> On Sun, 17 Aug 2008 22:36:39 +0200, Rob <nospam@plea.se> wrote:
>>
>>> if (($_FILES["file"]["type"] == "image/gif")
>>> || ($_FILES["file"]["type"] == "image/jpeg")
>>
>>
>> Waarschijnlijk zegt MSIE wat anders (n.a.w. 'image/x-jpeg' o.i.d.), wat
>
> [snip]
>
> image/pjpeg, om precies te zijn.
>
>> Om te controleren of iets een plaatje is (waar ik wat mee kan) gebruik
>> ik normaal de GD functie getimagesize(): relatief laag resource
>> gebruik, en je weet zeker dat je het als plaatje kunt interpreteren:
>
> Nog een pedante opmerking: getimagesize() werkt ook zonder de GD-bieb.
Yup, dat gelukkig wel, alhoewel ik nog maar weinig PHP omgevingen /
hostingspakketten zonder GD ben tegengekomen.
--
Rik Wasmus
-
Re: upload controleren op type (php)
On Mon, 18 Aug 2008 11:11:25 +0200, Maarten Wierda
<moart3nAT@chelloDOT.invalid> wrote:
> Nico Schuyt schreef:
>
>> [Testen met if ($_FILES["file"]["type"] == "image/jpeg") e.d.]
>>
>>> ... Verder is dit een 'user-supplied' waarde, ofwel: totaal
>>> onbetrouwbaar. Ik kan als ik dat wil best wel een nare executable
>>> uploaden en beweren dat het een jpeg is.
>> Dat is teleurstellend! Ik heb altijd gedacht dat het een controle op
>> de header van het bestand was.
>
> Ook die valt theoretisch te manipuleren, meen ik.
>
>> Betekent dit dat je net zo goed de extensie kunt controleren?
>
> Theoretisch gezien wel, aangezien zowel met de headers als de extensie
> van een bestand gerommeld kan zijn. Even de afmetingen van een bestand
> opvragen middels de GD-functie getimagesize() lijkt me dus de beste
> oplossing.
Om daar op voor te borduren: zelfs geldige jpeg plaatjes kunnen PHP code
geembed hebben zitten (bijvoorbeeld erin gezet met edjpgcom, voor de
mensen die het met een hex editor te veel werk vinden). Nu zou daar
normaal geen probleem mee moeten zijn (wie stelt er nu in dat jpeg
bestanden door de PHP module/CGI heen moeten?), ware het niet dat:
1) Sommige mensen zo graag rare extensies willen gebruiken voor bestanden
die eigenlijk php zijn (.pdf, .html,.js, die eigenlijk naar een php script
toe gaan waar on the fly wat wordt gegenereerd) en in plaats van een
server side rewrite van de url maar gewoon alles door PHP halen. Niet
alleen een slecht idee voor performance van de server, maar in dat geval
ook een extreem veiligheidslek.
2) Somnmige mensen denken mooi dat plaatje ergens anders dan rechtstreeks
via de url te parkeren en dan in een PHP script met een include/require
(!) alsnog het plaatje serveren, in plaats van met een readfile() of
aanverwanten.
Beiden grove fouten natuurlijk, maar je zou verbaasd staan over hoe vaak
het nog voorkomt...
--
Rik Wasmus
-
Re: upload controleren op type (php)
On Aug 18, 8:27*pm, "Rik Wasmus" <luiheidsgoe...@hotmail.com> wrote:
> On Mon, 18 Aug 2008 11:11:25 +0200, Maarten Wierda *
>
>
>
> >> *Dat is teleurstellend! Ik heb altijd gedacht dat het een controle op
> >> de header van het bestand was.
>
> > Ook die valt theoretisch te manipuleren, meen ik.
>
> >> Betekent dit dat je net zo goed de extensie kunt controleren?
>
> > Theoretisch gezien wel, aangezien zowel met de headers als de extensie
> > van een bestand gerommeld kan zijn. Even de afmetingen van een bestand
> > opvragen middels de GD-functie getimagesize() lijkt me dus de beste
> > oplossing.
>
> Om daar op voor te borduren: zelfs geldige jpeg plaatjes kunnen PHP code *
> geembed hebben zitten (bijvoorbeeld erin gezet met edjpgcom, voor de *
> mensen die het met een hex editor te veel werk vinden). Nu zou daar *
> normaal geen probleem mee moeten zijn (wie stelt er nu in dat jpeg *
> bestanden door de PHP module/CGI heen moeten?), ware het niet dat:
Er zijn php versies in de omloop waar je de ascii gewoon aan een
plaatje
geplakt ook kunt laten parsen als het op een bepaalde manier gelezen
wordt.
>
> 1) Sommige mensen zo graag rare extensies willen gebruiken voor bestanden*
> die eigenlijk php zijn (.pdf, .html,.js, die eigenlijk naar een php script *
> toe gaan waar on the fly wat wordt gegenereerd) en in plaats van een *
> server side rewrite van de url maar gewoon alles door PHP halen. Niet *
> alleen een slecht idee voor performance van de server, maar in dat geval *
> ook een extreem veiligheidslek.
Op die manier inderdaad slecht. Het is echter zo dat dat niet zozeer
aan
php ligt maar aan de manier hoe Apache en andere webservers vaak zijn
te configureren. Heb jaren lang default.ida's geparsed en daarmee
shitlijsten
weten te vullen als ze bepaalde argumenten meegaven.
Hans
> --
> Rik Wasmus
-
Re: upload controleren op type (php)
"Rik Wasmus" <luiheidsgoeroe@hotmail.com> wrote:
> Waarschijnlijk zegt MSIE wat anders (n.a.w. 'image/x-jpeg' o.i.d.),
> wat je natuurlijk makkelijk kunt controleren door de $_FILES array te
> dumpen en te controleren. Verder is dit een 'user-supplied' waarde,
> ofwel: totaal onbetrouwbaar. Ik kan als ik dat wil best wel een nare
> executable uploaden en beweren dat het een jpeg is.
>
> Om te controleren of iets een plaatje is (waar ik wat mee kan) gebruik
> ik normaal de GD functie getimagesize(): relatief laag resource
> gebruik, en je weet zeker dat je het als plaatje kunt interpreteren:
<knip>
Maar ja... ook met het gebruik van 'getimagesize' weet je dat een paar
velden een vorm hebben die verwacht wordt, meer niet. Over de verdere
inhoud van het bestand weet je dan nog niets; dat kan net zo goed iets
zijn als bijv. PHP-script. Het is overigens geen nieuw onderwerp.
Zie o.a. deze suggesties & opmerkingen:
http://ha.ckers.org/blog/20070604/pa...-getimagesize/
WD
-
Re: upload controleren op type (php)
On Mon, 18 Aug 2008 23:23:32 +0200, Warden Dave <wardendave@mnsys.invalid>
wrote:
> "Rik Wasmus" <luiheidsgoeroe@hotmail.com> wrote:
>
>> Waarschijnlijk zegt MSIE wat anders (n.a.w. 'image/x-jpeg' o.i.d.),
>> wat je natuurlijk makkelijk kunt controleren door de $_FILES array te
>> dumpen en te controleren. Verder is dit een 'user-supplied' waarde,
>> ofwel: totaal onbetrouwbaar. Ik kan als ik dat wil best wel een nare
>> executable uploaden en beweren dat het een jpeg is.
>>
>> Om te controleren of iets een plaatje is (waar ik wat mee kan) gebruik
>> ik normaal de GD functie getimagesize(): relatief laag resource
>> gebruik, en je weet zeker dat je het als plaatje kunt interpreteren:
> <knip>
>
> Maar ja... ook met het gebruik van 'getimagesize' weet je dat een paar
> velden een vorm hebben die verwacht wordt, meer niet. Over de verdere
> inhoud van het bestand weet je dan nog niets;
Tja, we hebben hier 2 kanten van de thread, waar het mee begon is 'hoe kan
ik zien wat voor plaatje het is', waarvoor getimagesize() prima geschikt
is (in ieder geval beter dan extensie of mime-type controleren), waarbij
je er van uit gaat dat als die deze test doorstaat je er in ieder geval
iets mee kan (zoals dimensies aanpassen met de GD functies). Als mensen
moedwillig verkeerde gebroken plaathes gaan uploaden is het een ander
verhaal.
> dat kan net zo goed iets
> zijn als bijv. PHP-script. Het is overigens geen nieuw onderwerp.
> Zie o.a. deze suggesties & opmerkingen:
> http://ha.ckers.org/blog/20070604/pa...-getimagesize/
Yup, goede verhalen. Ik zelf sla nooit user uploads op als bestand. Een
prepared statement gebruiken voor een blob naar een database, en precies
dezelfde blob weer teruggeven bij opvragen, dat is toch wel veiliger, en
bovendien naar mijn idee makkelijker te administreren (zeker bij een
systeem met 'gebruikers' houd ik nogal van ON DELETE CASCADE functies,
handig zo'n database die direct gerelateerde info opruimt
). Met de
juiste instellingen is het ook maar marginaal trager dan via het
bestandssyteem serveren van de inhoud.
--
Rik Wasmus
- advertentie



LinkBack URL
About LinkBacks
