[PHP] Virus risico's bij accepteren ingestuurde foto's?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Voor een site wil ik een functionaliteit gaan bouwen, waarmee bezoekers een eigen afbeelding kunnen uploaden voor in een fotoalbum. De formaten wil ik beperken tot jpg/gif/png.

Ik werk hiervoor met PHP.
Mijn idee is dat men in een <input type='file'> box een foto selecteert van de harde schijf en dan het formulier kan verzenden.

Aan de server-side wil ik vervolgens met behulp van de GD library de foto's schalen naar een standaard-breedte en vervolgens alleen de geschaalde afbeelding opslaan. Ik heb het idee dat je daarmee voorkomt dat bestanden die stiekem toch geen afbeelding blijken te zijn wegfiltert, omdat GD een foutmelding zal geven dat hij geen geldige afbeelding kan creeren (imagecreatefromjpeg etc.).

Nu vraag ik me af of die werkwijze inderdaad afdoende is, of dat ik nog verdacht moet zijn op andere mogelijkheden dat het verstuurde bestand virussen of andere malware bevat.

Alvast bedankt voor het meedenken!

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Jpeg virussen die werken volgens mij niet zo, en zowiezo moet je wel eerst de mimetype header uitlezen voordat je hem processed

Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Je opent die jpg niet he, je processed die, maar je doet nooit execute!

Dus zowiezo gaat dat niet.

En waarschijnlijk gebruik je Linux, dus die virussen zullen niet pakken

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Snakiej schreef op maandag 29 januari 2007 @ 14:23:
En waarschijnlijk gebruik je Linux, dus die virussen zullen niet pakken
Dat is natuurlijk een ernstig gevaarlijke aanname.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • TheBorg
  • Registratie: November 2002
  • Laatst online: 20-09 18:24

TheBorg

Resistance is futile.

Gebruik getimagesize() om de resolutie en type foto te bepalen. Komen daar fatsoenlijke waarde uit dan weet je zeker dat het een normale foto is.

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Megamind schreef op maandag 29 januari 2007 @ 14:19:
Jpeg virussen die werken volgens mij niet zo, en zowiezo moet je wel eerst de mimetype header uitlezen voordat je hem processed
Pas daarbij wel op dat ook die headers te faken zijn. :)
Snakiej schreef op maandag 29 januari 2007 @ 14:23:
En waarschijnlijk gebruik je Linux, dus die virussen zullen niet pakken
Dat is, zoals Grijze Vos al suggereert, heel erg leuk met voor Linux geschreven virussen. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

Het beste wat je kan doen is de afbeelding inladen in GD en dan vervolgens op je server opslaan als bijvoorbeeld PNG. In mijn ervaring scheelt dit niets in kwaliteit, maar geeft het wel een iets betere compressie tov JPEG.

Ook voorkom je ermee dat er gegevens op je server terecht komen die er niet thuis horen, in een JPEG kun je namelijk vanalles stoppen wat eventueel bij een hack ofzo gebruikt kan worden.

Voor zo ver ik weet zijn er geen virussen die in een JPEG, GIF of PNG kunnen zitten waar GD last van heeft (maar dat zou je moeten nazoeken, wellicht dat iemand dat hier zeker weet?)

Let wel dat dit je een beetje load op de server kost, maar het is redelijk minimaal.
Ook helpt het geanimeerde GIF's om zeep (die zijn dan niet meer geanimeerd) en moet je af en toe opletten met transparantie.

[ Voor 15% gewijzigd door Verwijderd op 29-01-2007 15:00 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op maandag 29 januari 2007 @ 14:58:
Het beste wat je kan doen is de afbeelding inladen in GD en dan vervolgens op je server opslaan als bijvoorbeeld PNG. In mijn ervaring scheelt dit niets in kwaliteit, maar geeft het wel een iets betere compressie tov JPEG.
Grapjas. :D PNG is lossless, waar JPEG lossy is. Een 24-bits afbeelding (bijvoorbeeld een foto) die gigantisch veel kleurgegevens bevat wordt al gauw talloze MB's groot als je hem als PNG opslaat, waar je met JPEG-compressie al binnen een paar honderd KB klaar bent. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

Verwijderd

-NMe- schreef op maandag 29 januari 2007 @ 15:02:
[...]

Grapjas. :D PNG is lossless, waar JPEG lossy is. Een 24-bits afbeelding (bijvoorbeeld een foto) die gigantisch veel kleurgegevens bevat wordt al gauw talloze MB's groot als je hem als PNG opslaat, waar je met JPEG-compressie al binnen een paar honderd KB klaar bent. :)
Dan sla je het op als JPEG ipv PNG, dat maakt ook niet zoveel uit.
Het hangt maar net af van het gebruik wat in jouw geval makkelijker is.

Je kan ook gewoon zoeken naar zaken om te zeuren, in dit geval maar een klein detail.

Het ging er dus om (voor mensen die blijkbaar moeite hebben met lezen maar focussen op kleine details):

Je verwerkt de afbeelding eerst als zijnde een afbeelding en slaat die vervolgens bewerkt op, op die manier kan er nooit iets ingestopt worden wat jij niet erin wil hebben.

Het hercompressen van een JPEG kan vooral in GD ervoor zorgen dat het er allemaal niet zo goed meer uit ziet, vandaar dat PNG geschikter is. De ingebakken compressie van PNG is al behoorlijk goed (hoewel er dus inderdaad situaties zijn waarbij een PNG vele malen groter zal zijn als een JPEG), daarnaast kun je vrij eenvoudig bijvoorbeeld gzip compressie over de PNG heen gooien mocht je echt bandbreedte tekort hebben. (Qua opslag maakt het niet zoveel uit, opslag is relatief goedkoop).

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Verwijderd schreef op maandag 29 januari 2007 @ 15:57:
Dan sla je het op als JPEG ipv PNG, dat maakt ook niet zoveel uit.
Het hangt maar net af van het gebruik wat in jouw geval makkelijker is.

Je kan ook gewoon zoeken naar zaken om te zeuren, in dit geval maar een klein detail.

Het ging er dus om (voor mensen die blijkbaar moeite hebben met lezen maar focussen op kleine details):
Meteen geërgerd in de verdediging vliegen is inderdaad ook een optie als iemand je op een foutje wijst. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • JeRa
  • Registratie: Juni 2003
  • Laatst online: 30-04 10:28

JeRa

Authentic

Opnieuw opslaan (en dan inderdaad zoals -NMe- zegt als JPEG en niet als PNG) zou ik alléén doen als je de afbeelding ook qua afmetingen verkleint. Anders zit je met een afbeelding die hetzelfde aantal pixels in beslag neemt, ongeveer even groot is als het oude bestand maar waarvan de kwaliteit achteruit is gegaan.

ifconfig eth0 down


Acties:
  • 0 Henk 'm!

  • gvanh
  • Registratie: April 2003
  • Laatst online: 02-12-2023

gvanh

Webdeveloper

Topicstarter
Ja ... het zal in dit geval dan ook inderdaad veelal om foto's gaan ... (van meeuwen -> zie www.meeuwenoverlast.nl). Dus dan is het niet handig om png te gebruiken. Ik wil dan ook eigenlijk gewoon de bestandsindeling (jpg/png/gif) aanhouden van het originele bestand. Daarbij hoop ik eigenlijk dat GD helemaal z'n "eigen" versie van het plaatje maakt, waarbij eventueel verstopte codes volledig worden genegeerd.

Daarbij wordt bij het schalen (alles gaat standaard naar één breedte) van de afbeelding een interpolatie methode gebruikt die - zo hoop ik - helemaal alle eventueel verborgen "malware" naar de eeuwige jachtvelden verbant. Als laatste gooi ik er nog een "unsharp mask" overheen om kwaliteitsverlies bij het verkleinen te compenseren.

[ Voor 13% gewijzigd door gvanh op 29-01-2007 16:21 . Reden: aanvulling en verduidelijking ]


Acties:
  • 0 Henk 'm!

  • pietje63
  • Registratie: Juli 2001
  • Laatst online: 22:05

pietje63

RTFM

Bij het resize van plaatjes wordt het plaatje afaik gezien als een presentatie van de afbeelding en niet naar de rest van het bestand gekeken. Je zou dit eventueel kunnen testen door te kijken of bepaalde EXIF headers nog aanwezig zijn na het resize.

De grootste Nederlandstalige database met informatie over computers met zoekfunctie!!

Pagina: 1