Fornitura di immagini da root server web esterno

1

Sta memorizzando un'immagine al di fuori della radice del web server con un nuovo nome ed estensione (ad es. usando move_uploaded_file($_FILES['userfile']['tmp_name'],'../uploads/'.date('U').'png') - non esattamente questo, ovviamente, poiché date('U') non è univoco, e il file di caricamento dovrebbe essere eseguito dal webserver root) e caricandolo con readfile() sufficiente per proteggere un modulo di caricamento dell'immagine? In caso contrario, quali tipi di attacchi potrebbero superare questo (ad esempio eseguire codice php arbitrario, eseguire javascript sul client ecc.)?

    
posta macleos 10.02.2017 - 15:54
fonte

1 risposta

1

Sì, salvare i file al di fuori della web root ridurrà la superficie di attacco per i riferimenti diretti agli oggetti. Vorrei anche raccomandare di fare quanto segue:

  1. Convalida il file durante il caricamento: controlla il tipo mime del file contro una whitelist di tipi di immagine validi. Inoltre, controlla il tipo mime dei byte caricati. Non fare affidamento su ciò che il browser ti ha detto il file era
  2. Assegna un nome casuale al file - Puoi aggiungere un file     timestamp alla fine del nome del file se sei preoccupato per     unicità. Se l'utente è in grado di caricare un file dannoso, a     il nome casuale renderà più difficile per loro fare riferimento a quel file e     avere qualche processo webserver eseguirlo.
  3. Non cercare il file basato sull'input controllato dall'utente. Questo può lasciarti aperto al path traversal / più riferimento all'oggetto diretto (specificando un altro file, a cui non dovrebbero avere accesso.) Problemi.

Il principale vettore di attacco che può consentire l'upload di un file è l'inclusione di file locali aka. eseguire codice arbitrario sul tuo server. Ciò potrebbe includere l'esecuzione di codice php arbitrario e l'aggiornamento dei file javascript. Potrebbe persino risultare compromesso il server stesso in base alle autorizzazioni dell'account utente su cui è in esecuzione il server web.

    
risposta data 10.02.2017 - 18:46
fonte

Leggi altre domande sui tag