[javascript] 자바스크립트로 파일 업로드 및 다운로드 중 경로 보호하기

파일 업로드 및 다운로드는 웹 애플리케이션에서 매우 중요한 기능입니다. 하지만, 파일 시스템 경로를 보호하지 않으면 보안상의 위험이 발생할 수 있습니다. 이번에는 자바스크립트를 사용하여 파일 업로드 및 다운로드 과정에서 경로를 보호하는 방법을 살펴보겠습니다.

파일 업로드

사용자가 파일을 업로드할 때, 서버로 전송되는 파일의 경로가 노출되는 것을 방지해야 합니다. 이를 위해 파일의 경로를 보호하기 위한 여러 가지 방법이 있습니다. 대표적으로는 파일 업로드 시 파일명을 변경하고, 업로드된 파일을 저장할 디렉토리를 잘 관리하는 것이 있습니다.

아래는 Node.js와 Express를 사용하여 파일을 업로드하고, 업로드된 파일의 경로를 보호하는 예제 코드입니다.

const express = require('express');
const fileUpload = require('express-fileupload');
const app = express();
 
app.use(fileUpload());

app.post('/upload', function(req, res) {
  if (!req.files || Object.keys(req.files).length === 0) {
    return res.status(400).send('파일이 업로드되지 않았습니다.');
  }

  const sampleFile = req.files.sampleFile;
  const fileName = `file_${Date.now()}_${sampleFile.name}`;

  sampleFile.mv(`uploads/${fileName}`, function(err) {
    if (err)
      return res.status(500).send(err);

    res.send('파일이 업로드되었습니다.');
  });
});

위 코드에서, sampleFile.name을 기준으로 새로운 파일명을 생성하여 업로드된 파일을 보호하고 있습니다.

파일 다운로드

파일을 다운로드할 때에도 파일 경로를 보호할 필요가 있습니다. 파일을 다운로드할 때 사용되는 URL의 경로가 노출되면 보안에 취약해질 수 있습니다.

아래는 Express를 사용하여 파일을 다운로드하고, 경로를 보호하는 예제 코드입니다.

app.get('/download/:fileName', function(req, res){
  const fileName = req.params.fileName;
  res.download(`uploads/${fileName}`, function(err){
    if (err) {
      res.status(500).send(err);
    }
  });
});

위 코드에서 res.download를 사용하여 클라이언트에게 파일을 전송하고, 실제 서버의 파일 경로를 노출시키지 않고 다운로드할 수 있도록 보호하고 있습니다.

결론

파일 업로드 및 다운로드 중에 파일 경로를 보호하는 것은 보안을 유지하는 데 매우 중요합니다. 위에서 살펴본 예제 코드를 참고하여 파일 업로드 및 다운로드 기능을 구현할 때, 파일 경로를 보호하는 데 유의하여야 합니다.