[英]How to validate file names from a HTTP request in Node.js?
我有一个 node.js 应用程序,它公开了一个 API 以从资产目录中删除图像。
因此用户可以执行DELETE
请求并发送指定的图像进行删除,这是当前处理的方式:
const assetsPath = '/assets'
deleteFile(file: string) {
fs.unlink(`${assetsPath}/${file}`, (err) => {})
}
问题在于用户可以像这样提交请求:
http://server.com?fileName=../../some_personal_file.exe
它会删除资产目录之外的文件
我怎样才能防止这种情况? 我猜检查fileName.includes('../')
只是部分解决方案
Node.js 已发布有关如何缓解此攻击(称为路径遍历)的信息。
从该咨询中获取,您可以使用path
模块来确保此操作是安全的,如下所示:
const path = require('path');
const assetsPath = '/assets';
deleteFile(file: string) {
let deletePath = path.join(assetsPath, file);
if (deletePath.indexOf(assetsPath) === 0) {
fs.unlink(deletePath, err => {});
} else {
// Display an error to the user somehow
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.