微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何处理路径遍历?

如何解决如何处理路径遍历?

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

例如,应用程序通过 JSON 格式的 REST API 从客户端接收文件名,在不可访问(由外部)目录中查找该文件并检索该文件的响应:

app.get('/',(req,res) => {
  const fileName = req.body.fileName;
  // some code...
  fs.stat(`./nonAccessibleDir/${fileName}`,async function(err,stat) {
    // some code...
  });
  // some code...
}

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

更新: 抱歉,我忘了提及我知道我应该检查收到的输入,但是如果我需要传递“/”和“.”怎么办?在输入中?另外,如果我不需要这个字符,我只需要检查删除路径遍历漏洞吗?

解决方法

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。