Caricatore di file

Perché il caricamento di file comporta dei rischi

Ricevere file dagli utenti è un sistema comodo, ma se non progettato correttamente può portare a vulnerabilità gravi. Gli attaccanti possono sfruttare il caricamento per eseguire codice arbitrario, esaurire la capacità del server e distribuire file non autorizzati.

Le minacce principali sono le seguenti:

  • Caricamento / esecuzione di web shell — Caricamento di script dannosi per il controllo remoto.
  • File con malware — Secondari danni che possono diffondersi ad altri utenti.
  • Path Traversal — Salvataggio in posizioni non intenzionate a causa di specifiche di percorso non autorizzate.
  • DoS (bomba ZIP, file di grande capacità) — Esaurimento della capacità di archiviazione e del processamento.
  • Mascheramento delle estensioni / MIME — Bypass tramite doppie estensioni come .jpg.php o mascheramento del Content-Type.
  • XSS tramite anteprima — Esecuzione di script durante l'anteprima di SVG/HTML.

La base delle contromisure è la "difesa multilivello". È efficace progettare senza dipendere da una singola misura di protezione, sovrapponendo più strati di difesa.

Contromisure: principi da rispettare nella fase di progettazione

Controllo rigoroso delle estensioni e dei MIME (metodo whitelist)

Limitare le estensioni consentite e decidere se accettare o meno un file non solo in base all'estensione. Controllare la firma del file (magic number) per verificarne il contenuto. Non fidarsi dell'intestazione Content-Type e implementare meccanismi per prevenire metodi di bypass come doppie estensioni e byte NULL.

Sicurezza e rinominazione dei nomi dei file

Non salvare il nome del file fornito dall'utente così com'è. Sostituirlo con un nome univoco utilizzando UUID o hash + timestamp e salvare il nome originale come metadato separato. Gestire anche caratteri speciali e limiti di lunghezza.

Controllo della posizione di salvataggio e dei permessi

È importante salvare i file caricati fuori dalla root web per evitare che vengano eseguiti direttamente. Se possibile, salvare in uno storage oggetti dedicato (es.: S3) e generare un link di download tramite l'app. Limitare i permessi di lettura e scrittura della cartella di salvataggio, senza concedere diritti di esecuzione.

Limiti di dimensione e controllo dei caricamenti simultanei

Impostare un limite massimo per la dimensione dei file e introdurre un controllo sul numero di caricamenti simultanei e sulla velocità per garantire la disponibilità del servizio. Se vengono accettati file compressi (ZIP, ecc.), è necessario controllare anche ciascun file dopo l'estrazione.

Scansione dei malware e disarmamento dei contenuti (CDR)

Eseguire una scansione antivirus immediatamente dopo il caricamento (possibilmente utilizzando più motori) e disarmare file PDF/Office tramite CDR (Content Disarm & Reconstruct). È efficace ripristinare le immagini tramite re-encoding (lettura → generazione di un nuovo file) per rimuovere dati non autorizzati incorporati.

HTTPS / protezione delle comunicazioni e contromisure CSRF

Assicurarsi che le comunicazioni siano sempre protette via TLS (HTTPS) e implementare contromisure come i token CSRF. Aggiungere l'intestazione Content-Disposition: attachment e X-Content-Type-Options: nosniff alle risposte di download per prevenire malfunzionamenti del browser.

Registrazione, audit e meccanismi di avviso

Tenere un registro dettagliato di chi ha gestito quali file e quando, impostando avvisi per comportamenti anomali (caricamenti frequenti o un numero elevato di rifiuti). Mantenere hash per l'integrità dei file è anche utile.

Test di vulnerabilità e test di penetrazione

Dopo l'implementazione, eseguire test di vulnerabilità specifici per il caricamento di file (inserimento di shell, bypass delle estensioni, path traversal, ecc.) e rivedere periodicamente.

Riflessioni sull'esempio di UploadF

Qui presentiamo UploadF (uploadf.com), un servizio che supporta sia PC che smartphone, offre drag & drop e consente il caricamento simultaneo di 100 file, ma che presenta anche alcune considerazioni e accorgimenti da tenere in mente nella progettazione del servizio.

Checklist di implementazione (dal punto di vista della progettazione della sicurezza)

Elemento di controllo Punti da attuare / confermare
Limitazione della whitelist delle estensioni Consentire solo i formati necessari. Utilizzare la blacklist come misura ausiliaria.
Controllo MIME / firma Verifica se l'estensione e il contenuto corrispondono (controllo del magic number).
Rinominazione dei file Sostituire con UUID o nomi hash e gestire il nome originale come metadato.
Rimozione dei caratteri speciali Rimuovere o rifiutare caratteri come `/`, `\`, `..`, NULL, ecc.
Directory di salvataggio Salvare al di fuori della root web o in uno storage oggetti.
Permessi di cartella Divieto di esecuzione, permessi minimi di lettura e scrittura (principio del minimo privilegio).
Dimensioni massime/minime dei file Chiarire il limite e controllare i file dopo l'estrazione da ZIP e altri.
Controllo dei caricamenti simultanei Limitare il numero di parallelismi, controllare la velocità e impostare timeout.
Scansione virus / CDR Eseguire scansioni immediate e trattamenti di disarmamento necessari.
Crittografia delle comunicazioni (HTTPS) Rendere obbligatorio l'uso di TLS (per prevenire attacchi man-in-the-middle).
Contromisure CSRF Implementare controlli basati su token.
Impostazione delle intestazioni di risposta Aggiungere Content-Disposition: attachment, X-Content-Type-Options: nosniff, ecc.
Registrazione e avvisi Audit dei comportamenti di caricamento e notifiche in caso di anomalie.
Revisione della sicurezza periodica Eseguire test di vulnerabilità e penetrazione regolarmente.
Cancellazione automatica dei file obsoleti Progettazione per la cancellazione completa dopo la scadenza di conservazione.
Controllo degli accessi / autorizzazione Gestire rigidamente i diritti di accesso per unità utente / gruppo.

Conclusioni e punti di vista per gli utenti

Le funzionalità di caricamento dei file presentano sia comodità che rischi. Integrare le difese multilivello (whitelist, controllo delle firme, separazione delle posizioni di salvataggio, misure anti malware, audit dei registri, ecc.) nel design ridurrà significativamente il rischio di attacchi.

È importante esprimere agli utenti che il servizio è "facile da usare e sicuro". Ad esempio, servizi come UploadF (uploadf.com), che offrono funzionalità di gestione come la cancellazione individuale e la configurazione dei periodi di conservazione, possono fornire un maggiore senso di sicurezza.

Fonti e letteratura di riferimento (parziale)

  1. OWASP — File Upload Cheat Sheet
  2. OPSWAT — Protezione del caricamento file / migliori pratiche
  3. PortSwigger — Vulnerabilità di caricamento file
  4. SANS Institute — Guida sicura al caricamento di file
  5. UploadF (uploadf.com) — Caricatore di file (sito di presentazione)

※ Le fonti sopra riportate sono esempi al momento della redazione dell'articolo. Si prega di consultare la documentazione ufficiale per materiali di implementazione più dettagliati o informazioni sulle minacce più recenti.


Top   Aiuto   Contatti   🌐Language  
©Caricatore di file