javascript - 如何处理路径遍历?
问题描述
我试图了解如何(以安全的方式)处理路径遍历。
例如,应用程序通过 REST API 以 JSON 格式从客户端接收文件名,在不可访问(外部)目录中查找它并使用该文件检索响应:
app.get('/', (req, res) => {
const fileName = req.body.fileName;
// some code...
fs.stat(`./nonAccessibleDir/${fileName}`, async function(err, stat) {
// some code...
});
// some code...
}
上述方法的问题是客户端可以在文件名请求中发送类似“../”的内容,并且它会毫无问题地“吃掉”它。如何处理这种情况,请问我应该如何修复这个漏洞?
更新:对不起,但我忘了提到我知道我应该检查收到的输入,但是如果我需要传递“/”和“。”怎么办?在输入?另外,如果我不需要这些字符,是否只需要检查以删除路径遍历漏洞?
解决方案
一种简单的方法是通过正则表达式验证文件名,该正则表达式检测任何../
段并在存在任何段时返回错误。
if (fileName.match(/\.\.\//g) !== null) {
// return an api error
}
您可以有一个非常严格的验证规则,以完全防止 fileName 中的任何正斜杠,从而只能直接指向所需目录中的文件。
推荐阅读
- sql - 具有不同类型数据的存储过程
- azure - 如何获取 Azure DevOps 管道手动取消回调
- javascript - Javascript:从 Range Slider 获取函数外的变量
- php - 如何使用 docker 和 kubernetes 在 laravel-echo-server 主机中使用 url 之类的子域而不是端口号?
- php - php echo语句执行失败
- php - 从索引到索引选择
- google-cloud-platform - GCIP - 使用基于 OIDC 的外部提供商启用授权代码授予流程
- redis - 自动启动redis worker
- c++ - 连续分配两个对象。从第二个地址获取第一个。创建后,不要静态知道第二个对象的类型
- kubernetes - Terraform 找不到 Helm 发布图表