Caricamento di immagini sicure di XSS, codice php e virus

3

So che la mia domanda è stata ripetuta molte volte, ma la maggior parte delle risposte risolve le funzioni che non uso nemmeno (come l'uso delle immagini) e che mi preoccupa perché forse non sto facendo qualcosa che dovrebbe fare.

Quando convalido le immagini, prima controllo le dimensioni (2 MB o meno) e poi controllo l'estensione del file usando:

$Extension=explode('.',$Userfile);

if(!in_array(end($Extension),$Whitelist))

Dove $Whitelist sono le estensioni che autorizzo (solo jpg, jpeg e png). Dopo di che uso getImageSize per verificare che sia davvero un'immagine e se tutte e 3 le condizioni sono soddisfatte, quindi creo un nuovo nome per l'immagine, aggiungo ".jpg" e poi lo salvi in una cartella di immagini (I don ' so se questo è importante, ma creo anche una versione ridotta dell'immagine da mostrare nella pagina e se vuoi vederla a grandezza intera, devi fare clic e vedere l'immagine originale in una nuova scheda).

L'unica cosa che faccio con queste immagini è mostrarle con img src="" sul mio sito web, non includo mai le immagini (in realtà non so nemmeno perché alcune persone lo fanno [non criticando, sono serio ]) o utilizzare fopen e funzioni simili e la cartella images non può eseguire il codice php.

È sufficiente non eseguire codice php incluso nelle immagini?

È sufficiente non eseguire codice html / javascript nelle immagini? Perché non voglio un attacco XSS solo perché ero ingenuo con le immagini e consideravo solo apache che eseguiva il codice php .

Devo fare qualcosa sulle possibili immagini con il virus? Penso che la limitazione delle dimensioni, aggiungere un nuovo nome e assicurarmi sempre di aggiungere .jpg alla fine del nuovo nome mi aiuti a mitigare questo , ma non ne sono proprio sicuro.

Sono nuovo con i contenuti caricati ed è per questo che mi sento davvero paranoico su questo (e su tutti i tipi di input dell'utente ... è come essere dentro una piramide dove tutto è maledetto), quindi apprezzerò davvero tutte le risposte .

    
posta Esteban 17.08.2013 - 13:18
fonte

1 risposta

3

Prima di tutto, dovresti controllare i tuoi caricamenti (immagine) perché possono facilitare lo sfruttamento di altri bug (come include il file locale). Poiché ci sono praticamente infiniti possibili vettori di attacco, probabilmente ti mancherai qualcosa ma dovresti fare del tuo meglio.

  • La soluzione per il filtraggio dell'estensione dipende dal tempo di esecuzione: Apache ad esempio eseguirà evil.php.jpeg come script PHP se l'estensione .jpeg non è registrata nella sua configurazione (si tratta comunque di un caso eccezionale). Suggerisco di filtrare le doppie estensioni e i nomi dei file che terminano con ".". Lettura consigliata:

link

  • getImageSize () ti dice se il file caricato è davvero un'immagine sebbene tu possa inserire contenuti arbitrari (come payload di attacco, codice PHP o HTML / JS) in alcune delle intestazioni legittime (pensa ai commenti PNg o EXIF ). Si può anche creare un file che sia un'immagine e valido in qualche altro formato contemporaneamente. Suggerisco di ridimensionare / trasformare l'immagine caricata, se possibile.

  • Come sottolineato da FakeRainBrigand, è necessario impostare le autorizzazioni del file su non eseguibile per ridurre il rischio di esecuzione a livello di sistema operativo (anche alcune configurazioni PHP richiedono che gli script siano eseguibili).

  • Limitare le dimensioni e rinominare sono buone pratiche!

  • Non so davvero cosa intendi per "immagine con virus". Si possono sfruttare bug nei motori di rendering di immagini per eseguire il codice, e non c'è molto che si possa fare al riguardo, poiché rilevare questo tipo di codice dannoso richiederebbe un intero sistema simile ad AntiVirus che dovrebbe affrontare il Problema di interruzione .

risposta data 17.08.2013 - 14:05
fonte

Leggi altre domande sui tag