경로 조작 (Path Traversal)
Path Traversal
Last updated
Path Traversal
Last updated
const fs = require('fs');
const express = require('express');
const app = express();
app.get('/download', (req, res) => {
// 사용자의 입력값을 그대로 파일 시스템 함수에 사용 (취약)
const fileName = req.query.file;
fs.readFile(fileName, (err, data) => {
if (err) return res.status(404).send('File not found');
res.send(data);
});
});const fs = require('fs');
const path = require('path');
const express = require('express');
const app = express();
const BASE_DIR = path.join(__dirname, 'files');
app.get('/download', (req, res) => {
const fileName = req.query.file;
// 경로 정규화 및 상위 디렉터리 접근 제한
const requestedPath = path.join(BASE_DIR, path.normalize('/' + fileName));
if(!requestedPath.startsWith(BASE_DIR)) {
return res.status(400).send('Invalid file path');
}
fs.readFile(requestedPath, (err, data) => {
if (err) return res.status(404).send('File not found');
res.send(data);
});
});