Newsgroup: it.comp.www.php
Titolo: Sicurezza nella creazione di files di cache

Basandomi su parte del codice presente in questo interessante articolo 
(
http://www.evolt.org/article/Automated_Creation_of_Thumbnails_With_PHP/20/24498/
) 
ho creato uno script che crea thumbnails di immagini e scrive su disco il 
file di cache dell'immagine creata. Il problema è che, utilizzando le 
variabili GET per impostare la lunghezza o larghezza dell'immagine (per 
intenderci: del tipo image.php?height=20), c'è il rischio che qualche utente 
cambi manualmente la variabile, facendo scrivere al server una quantità 
elevata di file di cache, dal momento che il mio script crea un file di 
cache per ogni grandezza diversa dell'immagine.
Come faccio a prevenire questo inconveniente?
Grazie Mille,
Matteo. 

 Come faccio a prevenire questo inconveniente?
Qualcosa come:
$h_max = 300;
$height = ($_GET['height'] > $h_max ? $h_max : $_GET['height']) 
non basta?
Chiaramente, il rapporto height/width dev'essere rispettato, se vuoi che
l'immagine sia scalata senza distorsioni.
Ciao.
Maverick
-- 
ĢChe non siete pių liberi di non avere una casa con letto per dormire.
 Lavorate voi - schiavi dei soldi - che non sentite la puzza della
 schiavitų!ģ (a Mario di Monte Mario, Roma) # 
http://libre.netsons.org/

 Come faccio a prevenire questo inconveniente?
1) elimini del tutto quel parametro passato via GET, e imposti l'height 
in maniera fissa all'interno dello script ($height=20;)
2) oppure, se vuoi che ci sia la possibilità che l'height della 
miniatura vari (???), fai un controllo sul valore ricevuto, in modo che 
non vada al di sopira (al di sotto) di certi limiti.
--
rob4you

 di sopira (al di sotto) di certi limiti.
Ringrazio entrambi per la risposta. Allora: il parametro via GET potrei 
effettivamente eliminarlo, però mi risulta comodo visto che devo mostrare 
delle miniature di dimensioni variabili in parti diverse del sito... Al 
controllo sull'height ci avevo già pensato...il problema è che se ad esempio 
impostassi un intervallo da 20 ad 100 px nel peggiore dei casi avrei già 80 
files di cache...
L'unica soluzione che mi viene in mente è utilizzare un controllo che faccia 
passare soltanto dei particolari valori di height e nessun altro 
valore...però pensavo ci fosse una soluzione più versatile che magari mi era 
sfuggita...
Grazie e buona notte,
Matteo.

 nel peggiore dei casi avrei già 80 files di cache...
scusa, non controlli se esiste già una thumbnail per quel file (anche se
con dimensione diversa), prima di crearne una nuova? in genere non ha
molto senso creare thumbnail di varie dimensioni: quando invece ha
senso, devi per forza, come dicevi anche tu, stabilire quali e quanti
casi ti vanno bene (ad es. su flickr ci sono 5 "taglie"). insomma,
dipende da ciò che vuoi fare, e quello lo sai solo tu. ;-)
poi puoi sempre crittare ciò che passi via GET/POST, in modo da evitare
che qualcuno possa capire che si tratta delle dimensioni delle immagini
o comunque evitare che possa capire come impostare una certa height.
Ciao,
Maverick
-- 
«Che non siete più liberi di non avere una casa con letto per dormire.
 Lavorate voi - schiavi dei soldi - che non sentite la puzza della
 schiavitù!» (a Mario di Monte Mario, Roma) # 
http://libre.netsons.org/

 Basandomi su parte del codice presente in questo interessante articolo

1) image.php?type=icon, image.php?type=medium, image.php?type=large.
Imposti tipi predefiniti, così, mal che vada sono gli unici creabili e  
riduci il disagio. Il che aiuta anche a mantenere l'uniformità dei formati  
immagine all'interno dell'applicazione.
2) image.php?height=20&key=OIEJOWEIJEWUH
nell'esempio "OIEJOWEIJEWUH" è la chiave md5 di 20.$password.
Il parametro password lo imposti nell'applicazione, per sputare l'url  
dell'immagine usi una funzione che ti forma il link automaticamente  
compresa altezza e chiave md5. Dentro image.php come prima cosa controlli  
che md5( $_GET[ 'height'].$password ) == $_GET[ 'key' ].
$password è una variabile dentro il tuo file di configurazione e non  
appare mai in pagina.
Tac
-- 
Using Opera's revolutionary e-mail client: 
http://www.opera.com/mail/

 delle miniature di dimensioni variabili in parti diverse del sito... Al 
Allora passa un parametro fisso, tipo
?size=mini
?size=micro
?size=medium
?size=large
?size=extralarge
Nel tuo script fai uno switch che imposta delle dimensioni fisse in base a
quel parametro, e ne scegli uno di default da mostrare se l'utente tenta
di fregarti.
Bye.

 appare mai in pagina.
Ottimo grazie.
Matteo.