Newsgroup: it.comp.www.php
Titolo: Mi controllate questo scriptino?

Serve per verificare il tipo di file che si tenta di caricare:
$name = $_FILES['immagine']['name'];
$ext = explode(".", $name);
$num = (count ($ext)) - 1;
$ext = $ext[$num];
if (($ext == "gif") || ($ext == "jpg") || ($ext == "jpeg")) {
	esegui lo script
} else {
	il file non è di un tipo valido
}
Ho letto che usare $_FILES['immagine']['type'] per verificare il tipo di
file non è del tutto sicuro. per questo ho pensato a questa soluzione.
Opinioni?
Arjuna
-- 
Gnotis se auton.
 07/04/2004 12.36.38

 
questo lo č ancora meno, sicurezza = nulla
se ci pensi bene non č cosě difficile cambiare l'estensione ad un file
pensa che alcuni mesi fa chiedendo proprio un metodo sicuro per 
controllare i file in upload mi hanno suggerito proprio il metodo che tu 
menzioni come insicuro(ovviamente) .... ^_^ ..... chi? ..... una persona 
ben nota in questo ng che non nomino per evitare di insultaci nuovamente
in php puoi utilizzare la funzione mime_content_type
io cmq ho utilizzo il comando "file" di linux, molto utile anche per 
file che non sono immagini
riporto un mio esperimento con entrambi i metodi su una serie di 
file(anche rinominando l'estensione dei file non cambia nulla)
qui con il comando "file" di unix
test.php: PHP script text
test.mid: Standard MIDI data
test.wav: RIFF (little-endian) data, WAVE audio, Microsoft PCM, 8 bit,
mono 11025 Hz
test.jad: ASCII text, with CRLF line terminators
test.jar: Zip archive data, at least v2.0 to extract
test.mmf: Yamaha SMAF file
test.css: ASCII text, with CRLF line terminators
test.js: ASCII C program text, with CRLF line terminators
test.swf: Macromedia Flash data, version 5
test.xml: XML document text
test.avi: RIFF (little-endian) data, AVI
test.thm: POSIX tar archive
test.tar.gz: gzip compressed data, from Unix
test.gif: GIF image data, version 89a, 70 x 70
qui con la funzione php mime_content_type
   text/plain
   audio/midi
   audio/x-wav
   text/plain
   application/zip
   text/plain
   text/plain
   text/plain
   text/plain
   text/plain
   audio/x-wav
   application/x-tar
   application/x-gzip
   image/gif
ciao
Andrea

Opinioni?
Se ti interessano solo le immagini, basta che tu usi getimageinfo(). Se
la funzione fallisce o ritorna schifezze, non e' una immagine, o magari
e' una immagine parecchio corrotta.
Velocissimo, e non ti servono nemmeno le GD :-)
Leonardo
-- 
Time's angles, mages tell, conceal a place
incredible, beyond the mundane mind;
night-shrouded and between the seas of space
dread creatures drift in the ageless winds.

 Velocissimo, e non ti servono nemmeno le GD :-)
sei sicuro che questo controllo sia impeccabile con le immagini?
Sarebbe veramente vantaggioso.
Arjuna
-- 
Gnotis se auton.
 08/04/2004 3.05.37

 Se ti interessano solo le immagini, basta che tu usi getimageinfo().
Uhm. Da che versione di php e' stata implementata questa funzione?
Perche' sinceramente non riesco a trovarla da nessuna parte.
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Corollario alla prima legge:
"Qualunque tipo di tecnologia aliena sopravviva ad un esplosione
nucleare, puo' essere distrutta da un virus informatico creato dal primo 
imbecille che si ritrova un portatile sottomano." (ZER0)


:Provate a guardare gli ingredienti del famoso Labello che si usa per
:le labbra screpolate: Butirrospermum Parkii (sperma di maiale).

sei sicuro che questo controllo sia impeccabile con le immagini?
Sicuro, non sono sicuro nemmeno di come mi chiamo :-)
Tant'e' vero che la funzione si chiama getimagesize() e non getimageinfo()
(no, per dire, vero...).
http://us2.php.net/manual/en/function.getimagesize.php
Comunque, scherzi a parte, e' piu' sicuro del sistema mime-type o - peggio
ancora - del fidarsi dell'estensione (tra l'altro, ho il dubbio che alcuni
server basino il mime type sull'estensione, sicche' i due sistemi sono, in
realta', identici e ugualmente inaffidabili).
Estensione che poi puo' essere sbagliata in buona fede; c'era qualcuno che
salvava i .BMP ritenendoli .GIF, e funzionava, sia in scrittura che dentro
al browser. Ma se quel "GIF" lo aprivi con ImageFromGIF, povero te.
Una piccola prova pare funzionare:
$ echo "<? print_r(getimagesize('pippo.jpg')); ?>" | php -q
Array
(
    [0] => 177
    [1] => 27
    [2] => 1
    [3] => width="177" height="27"
    [bits] => 6
    [channels] => 3
    [mime] => image/gif
)
...qui ho passato una jpeg che in realta' era una GIF e se n'e' accorto.
$ echo "<? print_r(getimagesize('test.imgf')); ?>" | php -q
...questo non e' un tipo riconosciuto e ritorna 'false'.
Leonardo


 Leonardo un impegno preciso: dormire di piu'
Un impegno che dovrei condividere pur io..
-- 
C'ya,
  ZER0 :: coder.gfxer.webDesigner();
Se potete leggere questo, la mia donna e' caduta.
(Letta sul retro di una maglietta di un motociclista)

Ho ricontrollato lo script e mi sono reso conto che è indispensabile
distinguere gif da jpg.
Le gif non vengono gestite dalle GD 2.
Mime type allora? e come?
Arjuna...
-- 
Gnotis se auton.
 08/04/2004 16.11.34

Le gif non vengono gestite dalle GD 2.
Ehm. Ma li leggi i miei messaggi o ti limiti alle prime due righe? :-)
Ho postato anche una prova, ed era fatta proprio su un file .GIF.
E, due messaggi fa, ho rassicurato: quella funzione non usa le GD2.
Il problema con i file GIF e' irrilevante al cubo:
- non si applica perche' non usiamo affatto le GD2
- non si applica perche' e' un problema solo per SCRIVERE i GIF, e non
  per DECODIFICARLI.
- non si applica perche' getimagesize() non decodifica mica nulla: non
  fa altro che leggersi lo header, che e' patent-free.


Ho letto bene quello che hai postato.
Io ho uno script che gestisce le gif e uno che gestisce le jpg. Uso le GD2,
so che non lo sapevi e per questo te l'ho detto.
Ho bisogno di sapere per poterli distinguere se i file caricati sono gif o
jpg.
Arjuna
-- 
Gnotis se auton.
 09/04/2004 1.22.37

jpg.
http://us2.php.net/manual/it/function.getimagesize.php
Leonardo laconico


Ho capito che questa funzione non fa parte delle GD.
Io ti sto dicendo che è importante distinguere se il file caricato è una
gif o è un jpg perchè se fosse una gif essa non può passare per le Gd.
Ergo la devo filtrare..
Arjuna
-- 
Gnotis se auton.
 10/04/2004 3.10.21

Ho capito che questa funzione non fa parte delle GD.
Infatti. Usi la funzione getimagesize(), che non ha bisogno delle GD per
poter funzionare (funziona sia con, che senza), per sapere il tipo della
immagine che hai sottomano.
Se getimagesize() ti dice che l'immagine e' in un formato che il *resto*
dello script non supporta (es.: TIFF, GIF, o AOL ART...), allora informi
l'utente del fatto e non prosegui.
Il vantaggio di getimagesize() e' che non si lascia imbrogliare se cambi
l'estensione del file; un GIF rinominato in JPEG viene riconosciuto come
il GIF che e' realmente. Per questo riconoscimento non servono le GD, in
quanto getimagesize() non legge affatto i GIF (o i JPEG), ma si limita a
riconoscerli. Il riconoscimento e' molto veloce, proprio perche' il file
non viene letto e caricato in memoria come immagine.
