Back to top

Autore Topic: upload file sicuro: cosa si deve considerare?  (Letto 3984 volte)

Offline Nescio

  • Esploratore
  • **
  • Post: 67
    • Mostra profilo
upload file sicuro: cosa si deve considerare?
« il: 19 Feb 2010, 21:33:16 »
Salve a tutti.
Scrivo qui, ma non so se sia la sezione appropriata.
Sono appena un novizio in fatto di php. Per Joomla ho realizzato plugin semplici (per uso personale e quindi su tabelle create direttamente nel db) che interagiscono col db, ma nulla di più.
Ora voglio passare a cose un pochino più complesse, creando per esempio una componente che consenta di uploadare immagini dal back-end ed applicare un effetto di watermark (cioè sovrapporre un logo png o gif all'immagine originale).
Sto mettendo insieme i pezzi del puzzle e sto cercando di imparare. Sapendo che il discorso sicurezza è fondamentale ho cercato in rete come effettuare un upload in php in sicurezza. Tra i tanti risultati, questa guida -gratuita- mi è parsa forse quella che ne parla meglio (link in inglese,traduzione in italiano ).
Quindi credo di dover fare l'equivalente utilizzando se possibile funzioni di joomla, come JFile.
Da questa guida mi pare emerga che:
-si deve controllare l'estensione del file
-cercare di controllare che l'header Content‐Type corrisponda quello di un'immagine non è sufficiente.
-l'immagine deve essere inserita in una cartella diversa dalla root alla quale non si può accedere direttamente
-si deve assegnare un nome casuale all'immagine.
-il percorso e il nome file devono essere salvati in un db
-l'immagine deve essere richiamata poi tramite db

La mia domanda è: il core di joomla effettua con Jfile un qualche tipo di controllo sui file caricati? (ho seguito l'esempio nella documentazione, funziona, ma non so se sia un modo sicuro per l'upload delle immagini)

Non pretendo stiate qui a perdere troppo tempo a darmi spiegazioni. Però magari potreste indicarmi cosa devo ricercare in rete per poter capire e imparare, perché avendo poca esperienza è una ricerca un po' a tentoni.

Quando metterò in sieme una versione alfa della componente, renderò ovviamente disponibile il codice per avere opinioni.

Grazie in anticipo

Max
.
Edit: Nel wiki inglese sono andato a rileggermi questa guida Creating_a_file_uploader_in_your_component . Mi sa tanto che la domanda che ho fatto era più o meno insensata-per questo ho modificato il titolo-, ma il tutorial quando parla di sicurezza rimanda al file che ho precedentemente linkato. Dunque sono al punto di partenza e non so ancora bene cosa devo cercare per capire meglio il problema. A presto.
« Ultima modifica: 20 Feb 2010, 18:27:01 da Nescio »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:upload file sicuro: cosa si deve considerare?
« Risposta #1 il: 20 Feb 2010, 21:40:41 »
ciao max,

-si deve controllare l'estensione del file
giusto, in modo che non siano inviati file che potrebbero essere richiamati e processati (php, perl...).

-cercare di controllare che l'header Content-Type corrisponda quello di un'immagine non è sufficiente.
esatto: infatti di solito non lo si controlla

-l'immagine deve essere inserita in una cartella diversa dalla root alla quale non si può accedere direttamente
dipende da come è impostato il server, solitamente la si lascia in /tmp del server (che non è accessibile dall'esterno) e si fanno i controlli, in seguito la si sposta.

-si deve assegnare un nome casuale all'immagine.
per i motivi detti al primo punto, se non si è fatto come detto sopra.

-il percorso e il nome file devono essere salvati in un db
-l'immagine deve essere richiamata poi tramite db
fai un po'come ti pare ;)

-il core di joomla effettua con Jfile un qualche tipo di controllo sui file caricati?
No nessuna, ha solo makeSafe per 'pulire' il nome del file.

-un modo sicuro per l'upload delle immagini
carica il file. con la libreria grafica leggine il tipo (es in GD usa $info=@getimagesize($file) ), se non è supportato cancella il file.


ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

mau_develop

  • Visitatore
Re:upload file sicuro: cosa si deve considerare?
« Risposta #2 il: 20 Feb 2010, 21:58:41 »
carica il file. con la libreria grafica leggine il tipo (es in GD usa $info=@getimagesize($file) ), se non è supportato cancella il file.
-----------------------------------------------------------------
...io proprio ti direi di ricreare l'immagine con gd, almeno pulisci gli header che sono sempre un po' pericolosi.
Così pure gli altri tipi di files dovrebbero "subire" una validazione degli header e se possibile una riscrittura.

M.

M.

Offline Nescio

  • Esploratore
  • **
  • Post: 67
    • Mostra profilo
Re:upload file sicuro: cosa si deve considerare?
« Risposta #3 il: 21 Feb 2010, 13:51:56 »
Gentilissimi. Come si è capito sono alle prime armi e questi consigli sono molto utili per me,perlomeno per capire e cercare di far qualcosa.
Vi ringrazio e appena farò qualcosa di sensato (un semplice upload, che ricrei l'immagine e dia la possibilità di ridimensionare e di un effetto watermark) posterò il codice per avere, nel caso, la vostra opinione.

Grazie per aver risposto

Max
.

Offline Nescio

  • Esploratore
  • **
  • Post: 67
    • Mostra profilo
Re:upload file sicuro: cosa si deve considerare?
« Risposta #4 il: 21 Feb 2010, 20:33:04 »
carica il file. con la libreria grafica leggine il tipo (es in GD usa $info=@getimagesize($file) ), se non è supportato cancella il file.
-----------------------------------------------------------------
...io proprio ti direi di ricreare l'immagine con gd, almeno pulisci gli header che sono sempre un po' pericolosi.
Così pure gli altri tipi di files dovrebbero "subire" una validazione degli header e se possibile una riscrittura.

M.

M.
Avrei una domanda a tal proposito.
Dopo aver effettuato l'upload, prima di spostarla voglio ricreare l'immagine. Ho trovato alcuni esempi e ho fatto alcune prove. Con questo script (prelevato da: phpblog.it) tramite le librerie gd si può creare una nuova immagine ridimensionata partendo dall'originale. Facilmente lo posso adattare alle mie esigenze (ricreando un'immagine con le stesse dimensioni).
Ho quindi creato un'immagine sul pc, l'ho commentata sia in photoshop che in windows (così che nelle proprietà alla fine risultava tra i commenti il programma che l'ha generata e quelli fatti sotto windows). Tramite lo script che riporto, ne ho creata una nuova che ho salvato dal browser e quei commenti sono scomparsi.
La domanda è: era questo che intendevate per riscrivere il file, ripulendo in tal modo gli header?

Chiedo scusa se la domanda può essere banale. Voglio essere sicuro di quello che faccio.
Di seguito il codice che ho utilizzato. Rimando tutti i novizi come me alla fonte per una breve ma utile guida sulle gd.
Ringrazio in anticipo chiunque sarà così gentile da rispondermi, e per la disponibilità di coloro che hanno già risposto.

Codice: [Seleziona]
<?php
$w 
50;
$h 50;
$src 'ImmagineCommentata.jpg';
$size getimagesize($src);
$im = @imagecreatefromjpeg($src);
$newwidth $size[0];
$newheight $size[1];
if( 
$newwidth $w ){
$newheight = ($w $newwidth) * $newheight;
$newwidth $w;
}
if( 
$newheight $h ){
$newwidth = ($h $newheight) * $newwidth;
$newheight $h;
}
$new imagecreatetruecolor($newwidth$newheight);
imagecopyresized($new$im0000$newwidth$newheight$size[0], $size[1]);
header('Content-Type: ' $size['mime']);
@
imagejpeg($new''100);
@
imagedestroy($im);
@
imagedestroy($new);
?>


A presto

Max
.

mau_develop

  • Visitatore
Re:upload file sicuro: cosa si deve considerare?
« Risposta #5 il: 21 Feb 2010, 20:50:55 »
La domanda è: era questo che intendevate per riscrivere il file, ripulendo in tal modo gli header?
----------------------------------------------------------------
esatto

e nella stessa funzione puoi implementare anche il watermark, oppure scriverci sopra quello che vuoi.

il mio amico Matrix86 ha scritto una pratica classettina che puoi implementare e fa tutto quello che vuoi
http://www.tuxmealux.net/index.php/download/2.SourceCode.html
"image manupulation..."

M.

 



Web Design Bolzano Kreatif