Esistono molti articoli, esercitazioni e domande sui caricamenti di file nel nodo, ma per lo più sono per principianti e nessuno di questi spiega pienamente come proteggere i caricamenti di file per la produzione. Ho provato molto duramente a trovare una risposta completa su come farlo, ma non ha avuto successo.Come caricare in modo sicuro i file nel nodo con Express?
Di seguito è una spiegazione dei miei risultati.
Limite dimensione del file in upload:
app.use(express.limit('4mb'));
il caricamento di file Limitato a solo determinati percorsi: Non riesco a far questo in realtà lavorare ma qui è quello che ho provato:
Sostituire:
app.use(express.bodyParser());
con
app.use(express.json()); app.use(express.urlencoded());
e aggiungere il middleware più parti ad ogni percorso di upload:
app.post('/upload', express.multipart(), uploadController.uploadPhoto);
Questa parte non funziona, ma l'upload funziona bene se lascio
express.bodyParser()
. Quindi cosa sto sbagliando?Controllo tipo di file caricato prima di salvare caricare su disco:
non riuscivo a capire questa parte, ma un suggerimento è stato quello di scrivere un middleware personalizzato che utilizza formidabile per analizzare upload di file e cercando di ridimensionare il file prima che venga salvato (supponendo che sia un'immagine) usando una libreria come la magia dell'immagine. Il suggerimento era che questo avrebbe reso l'immagine sicura e garantire che fosse effettivamente un'immagine (perché il processo fallirebbe se non fosse un'immagine).
Ciò funzionerebbe solo con le immagini, quindi non è una soluzione completa.
Come posso implementarlo? Qualche codice di esempio?
C'è qualcos'altro che mi manca perché i caricamenti siano sicuri?
3 sarebbe la strada da percorrere, partendo dal presupposto che 2 non funziona. Se lo è, allora quella sarà la soluzione ideale. –
Da quello che ho letto 2 dovrebbe funzionare, sto facendo qualcosa di sbagliato? Hai anche qualche esempio su come fare 3? Ho provato a farlo e non ha avuto successo. La maggior parte del codice che ho trovato non funzionava con la nuova versione di Express –
Puoi per favore creare il progetto più piccolo possibile usando 2 e condividere il codice, possibilmente su github. Ci darò un'occhiata. Se non funziona, ne costruirò 3 per te e li condividerò. –