[PHP] Controleren of een upload een afbeelding is

Pagina: 1
Acties:

Onderwerpen


  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Ik wil zeker weten dat of een bestand dat geupload wordt via mijn PHP script een afbeelding is en geen "nep-afbeelding". Nu controleer ik al het mime-type via de $_FILES variable, maar ik weet dat wanneer je elk ander bestand (wat geen afbeelding is) hernoemt naar *.jpg het bestand toch wordt aangemerkt als afbeelding (image/jpeg). Ofwel, de $_FILES methode kijkt naar de bestandsextensie en niet naar de daadwerkelijke inhoud van het bestand.

Ik wil echter echt zeker van zijn dat het geuploade bestand een afbeelding is, zo niet, dan moet deze namelijk verwijderd worden. Hoe kan ik dit met zekerheid achterhalen?

Vormkracht10


  • Juup
  • Registratie: Februari 2000
  • Niet online
het linux commando `file $filename` kijkt echt in een file om te kijken wat voor type het is.
Probeer dat eens?

Een wappie is iemand die gevallen is voor de (jarenlange) Russische desinformatiecampagnes.
Wantrouwen en confirmation bias doen de rest.


  • user109731
  • Registratie: Maart 2004
  • Niet online
Je zou GD kunnen gebruiken, bijv imagecreatefromjpeg. Die geeft false terug bij een niet-JPEG :)

Je zou ook naar de magic number kunnen kijken, maar dat is makkelijker te faken.

[ Voor 38% gewijzigd door user109731 op 18-12-2008 00:50 ]


  • Fatamorgana
  • Registratie: Augustus 2001
  • Laatst online: 21-07 01:24

Fatamorgana

Fietsen is gezond.

Misschien is dit wat? http://nl2.php.net/manual/en/function.getimagesize.php

Als je FALSE terugkrijgt dan zal het waarschijnlijk geen image zijn.

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Juup schreef op donderdag 18 december 2008 @ 00:46:
het linux commando `file $filename` kijkt echt in een file om te kijken wat voor type het is.
Probeer dat eens?
Thanks. Daar had ik nog niet aan gedacht! Het lijkt goed te werken. Dit is de eerste methode die ik tegenkom waarbij ik niet een afbeelding kan faken door de extensie te veranderen. Het werkt tevens ook heel snel met:

PHP:
1
system ( sprintf ( 'file %s', $_FILES [ 'image' ] [ 'tmp_name' ] ) );

[ Voor 0% gewijzigd door MarkvE op 18-12-2008 01:19 . Reden: voorbeeld code ]

Vormkracht10


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Juup schreef op donderdag 18 december 2008 @ 00:46:
het linux commando `file $filename` kijkt echt in een file om te kijken wat voor type het is.
Probeer dat eens?
Zo maak je je code wel platformafhankelijk.

  • Webgnome
  • Registratie: Maart 2001
  • Laatst online: 06:21
MarkvE schreef op donderdag 18 december 2008 @ 01:16:
[...]


Thanks. Daar had ik nog niet aan gedacht! Het lijkt goed te werken. Dit is de eerste methode die ik tegenkom waarbij ik niet een afbeelding kan faken door de extensie te veranderen. Het werkt tevens ook heel snel met:

PHP:
1
system ( sprintf ( 'file %s', $_FILES [ 'image' ] [ 'tmp_name' ] ) );
Ik denk toch dat http://nl2.php.net/manual/en/function.getimagesize.php een beter alternatief is. Zoals al is aangegeven is de oplossing in de quote niet slim. Wat nou als je je script verhuist naar een windows omgeving? dan werkt het script ineens niet meer.

Strava | AP | IP | AW


  • user109731
  • Registratie: Maart 2004
  • Niet online
Ik denk dat file enkel de eerste bytes checkt. Dat is veel eenvoudiger te faken dan gd, die opent het bestand echt als afbeelding.

  • McKaamos
  • Registratie: Maart 2002
  • Niet online

McKaamos

Master of the Edit-button

Gewoon met http://nl2.php.net/manual...n.imagecreatefromjpeg.php en varianten proberen image te laden en checken of je een false terugkrijgt ipv een resource identifier?

Iemand een Tina2 in de aanbieding?


  • Karrde
  • Registratie: Februari 2000
  • Niet online
Volgens mij kan je met de functie getimagesize mime types achterhalen, en daarna met de functie imagetypes controleren of er ondersteuning voor is in GD.

  • MarkvE
  • Registratie: Maart 2004
  • Laatst online: 30-01 17:16
Voor de platformonafhankelijkheid kan ik inderdaad beter getImageSize gebruiken met daarna een check of GD het bestand kan lezen. Deze methode ga ik dan ook gebruiken.

Vormkracht10

Pagina: 1