繁体   English   中英

如何从 Node.js 中的 HTTP 请求验证文件名?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM