File di caricamento sicuro

1

Ho un sistema caricato file nel mio progetto php.

Che cosa faccio al caricamento:

1) Controlla l'estensione del file e il tipo di file mime.

2) Se i tipi di estensione e mime sono consentiti, salvo il file fuori dalla directory public_html, quindi offro l'opportunità agli utenti, quindi scarica il file:

 if (file_exists($file_path)) {
        header('Content-Description: File Transfer');
        header('Content-Type: some mime type');
        header('Content-Disposition: attachment; filename=somefilename');
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file_path));
        readfile($file_path);
 }

Domanda: questa procedura per caricare file è sicura o no? In caso contrario, cosa può fare di più, per migliorare la sicurezza del caricamento del file?

Grazie.

P.S. stessa domanda su stackoverflow

    
posta OTAR 04.02.2014 - 20:11
fonte

3 risposte

1

Un miglioramento marginale che potresti fare è spostare i file caricati in un posto dove PHP nel server web non può accedervi. Ciò implicherà necessariamente qualche altro script non attivato dal server Web, come un cron job o un sistema di accodamento asincrono come Rabbit.

L'attacco che impedisce è l'escalation da un inserimento di file locale a un compromesso completo del server.

Se un utente malintenzionato conosce una vulnerabilità LFI e può caricare file sullo stesso server Web, può utilizzare tale combinazione per compromettere il server. Se il tuo sistema di caricamento sposta i file in un posto a cui il server web non può accedere (al di fuori del PHP open_basedir con safe_mode impostato su on o anche su un server separato), la vulnerabilità LFI non può essere sfruttata per includi i file caricati dagli attacchi.

    
risposta data 04.02.2014 - 21:37
fonte
1

Un miglioramento che potresti osservare è la scansione di malware dei file caricati. Anche se questa non sarà una protezione al 100%, potrebbe aiutare a ridurre il rischio che uno dei tuoi utenti carichi accidentalmente (o intenzionalmente) un file dannoso che potrebbe quindi infettare altri utenti.

    
risposta data 04.02.2014 - 20:39
fonte
0

Puoi controllare la mia domanda qui , che ha un codice valido per la gestione degli upload (per lo più sono preoccupato per immagini, ma ancora). Nella domanda affronterò un paio di problemi e dirò come li risolvo.

Anche la domanda ha una risposta eccellente sull'indurimento delle autorizzazioni dei file e sull'utilizzo di un dominio aggiuntivo per i file memorizzati.

    
risposta data 06.03.2014 - 21:35
fonte

Leggi altre domande sui tag