首页 > 解决方案 > 如何处理路径遍历?

问题描述

我试图了解如何(以安全的方式)处理路径遍历。

例如,应用程序通过 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...
}

上述方法的问题是客户端可以在文件名请求中发送类似“../”的内容,并且它会毫无问题地“吃掉”它。如何处理这种情况,请问我应该如何修复这个漏洞?

更新:对不起,但我忘了提到我知道我应该检查收到的输入,但是如果我需要传递“/”和“。”怎么办?在输入?另外,如果我不需要这些字符,是否只需要检查以删除路径遍历漏洞?

标签: javascriptnode.jssecuritypath-traversal

解决方案


一种简单的方法是通过正则表达式验证文件名,该正则表达式检测任何../段并在存在任何段时返回错误。

if (fileName.match(/\.\.\//g) !== null) {
    // return an api error
}

您可以有一个非常严格的验证规则,以完全防止 fileName 中的任何正斜杠,从而只能直接指向所需目录中的文件。


推荐阅读