为防止目录遍历攻击,可以使用express框架内置的中间件函数path.resolve()
对传入的参数进行处理,确保只返回请求的文件。以下是示例代码:
const express = require('express');
const path = require('path');
const app = express();
app.use('/static', (req, res, next) => {
// 处理请求的路径参数,确保只返回请求的文件
const filepath = path.resolve('./public', req.url.slice(1));
// 检查路径是否合法
if (!filepath.startsWith(path.resolve('./public'))) {
return res.status(403).send('Forbidden');
}
// 返回静态文件
res.sendFile(filepath);
});
app.listen(3000);
其中,path.resolve()
方法会将参数解析为绝对路径,避免了目录遍历攻击。另外,添加一个判断,确保请求的路径参数在public目录下,如果不在则返回403错误。