Sì, il tuo server potrebbe eseguire codice PHP all'interno di un file immagine se non è configurato correttamente :
link
Un esempio è image.gif.php
. Un file può essere sia un'immagine valida che uno script PHP valido, non è sufficiente controllare semplicemente la dimensione dell'immagine o altre proprietà. Né è sufficiente per strip metadata , una GIF non compressa può contenere PHP come dati di immagine (sebbene possa essere non utile), PNG supporta blocchi di dati arbitrari .
La falla sta accettando caricamenti con un controllo insufficiente della sanità, in particolare tentando di impedire nomi di file indesiderati (ad esempio .php
) utilizzando una espressione regolare non ancorata come \.(png|gif|jpg|jpeg)
(nessuna $
ancora), e consente di pubblicare le immagini da una directory con l'elaborazione PHP abilitata. La migliore pratica è che probabilmente non dovresti mai usare un nome utente fornito come-è.
Questi sono abbastanza classici convalida dei dati e input validation errori.
Se segui le istruzioni di installazione di PHP (per Apache 2) avere qualcosa di simile nella configurazione di Apache:
<FilesMatch "\.ph(p[2-6]?|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
Nota l'ancora $
, impedirà che file.php.gif
venga interpretato da PHP.
(Quello che manca da quelle istruzioni è assicurarsi che PHP sia limitato da un contesto <Directory>
contenente solo codice attendibile e non scrivibile dall'utente del server web .)
Se non segui queste istruzioni e utilizzi mod_mime
AddType
(o AddHandler
) invece:
AddType application/x-httpd-php .php # STOP!
Questo può causare lo stesso problema perché mod_mime
può fare qualcosa che non ti aspetti con più estensioni. Vedi link (grazie a Hendrik Brummermann per indicare questo fuori). Questo rischio può essere mitigato con il contesto <Directory>
configurato correttamente per consentire solo il codice attendibile.
Questo documento (PDF) è un po 'vecchio, ma copre bene le mitigazioni:
link
Un'altra possibile fonte di problemi è costituita da istruzioni include
/ require
non sicure (anch'esse trattate in quel PDF) che consentono a un utente malintenzionato di caricare% content% di contenuto co_de alterando stringhe di query o intestazioni di richieste HTTP.
Vedi anche la recente domanda correlata: Rischi di un caricamento di immagini PHP formare
(anche se non penso sia corretto affidarsi a include
per verificare le immagini), e
Usa PHP per controllare il file di immagine caricato per malware? (che contiene un insieme utile di collegamenti).