Quali passi dovrebbero essere presi per convalidare le immagini caricate dall'utente all'interno di un'applicazione?

22

Recentemente ho lavorato su un certo numero di applicazioni che hanno bisogno di elaborare le immagini caricate dall'utente. Sono state prese delle misure per convalidare l'estensione e il tipo mime.

Ma che altro si può fare per garantire che l'immagine sia valida?

Nel mio caso il caricamento è gestito da PHP e poi passato a GD o ImageMagick entrambi i quali soffrono di vulnerabilità che possono provocare negazione del servizio ed eventualmente l'esecuzione di codice arbitrario.

Sarei interessato a qualsiasi suggerimento che le persone potrebbero offrire per migliorare il processo di convalida sia specificamente per PHP che per qualsiasi applicazione web o non web in generale.

Dalla mia domanda di esempio sulla proposta di Area51

    
posta Mark Davidson 12.11.2010 - 15:29
fonte

3 risposte

12

Anche se sembra semplice da fare, il controllo delle immagini potrebbe essere complicato. Almeno seguendo le azioni dovrebbe essere fatto:

  • controlla la dimensione dell'immagine - larghezza, altezza e dimensione di se stessa;
  • controlla l'estensione e il nome dell'immagine;
  • verifica il tipo di contenuto;
  • limite quantità di immagini caricate;
  • limitare l'accesso alle immagini caricate - meglio se l'utente non sa dove è archiviato;
  • limiti i tipi di estensioni di immagini;
  • preferibilmente cambia il nome dell'immagine;

Inoltre, consiglierei di modificare il tipo di immagine in modo esplicito dopo tali controlli, ad es. da PNG a JPG. Semplice, ma funziona bene.

    
risposta data 12.11.2010 - 15:39
fonte
8

Non sono d'accordo con le risposte avanzate finora.

Dovresti sicuramente riscrivere l'immagine (forse costringendo l'utente a ridimensionarla) usando una libreria di manipolazione delle immagini, come quelle che hai suggerito.

È necessario prestare la massima attenzione per rimuovere i dati EXIF, ecc. a causa di vulnerabilità come GIFAR, XSS e Inclusione file - che possono abilitare il concatenamento degli attacchi.

    
risposta data 11.04.2011 - 01:59
fonte
1

Potresti inserire un limite di dimensione per farlo non superare i 2 MB o qualcosa del genere. Sarebbe utile con lo spazio di archiviazione e impedire agli utenti di caricare immagini ad alta risoluzione.

    
risposta data 12.11.2010 - 15:33
fonte

Leggi altre domande sui tag