I am trying to learn security best practices for NodeJS/Express. How can I secure this file upload? Currently, it just places files in a folder. I concerned about users uploading malicious files/code.
This is a simple file upload that comes from a form on my react frontend. The goal is to allow people to upload avatars for their profile. I am using Formidable, so I can check the type of the images, but I am wondering if this is secure enough?
server.js
const express = require('express');
const server = express();
server.listen(8000, () => {
console.log('Server started!');
});
server.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept',
);
});
const upload = require('./upload');
server.post('/upload', upload);
upload.js
const IncomingForm = require('formidable').IncomingForm;
module.exports = function upload(req, res) {
var form = new IncomingForm();
form.parse(req);
form.on('file', (field, file) => {
console.log(file);
});
form.on('fileBegin', function(name, file) {
file.path = __dirname + '/uploads/' + file.name;
});
form.on('end', () => {
res.json();
});
};