在Java中防止路径遍历

问题描述 投票:0回答:1

我正在用Java编写程序,并且已经意识到它很容易遍历路径。如何更改下面的代码以防止这种情况?

String file = request.getParameter("file");
        String downloadPath = DOWNLOAD_PATH + "/" + file;
        File downloadFile = new File(downloadPath);

https://find-sec-bugs.github.io/bugs.htm

我已经看过上面的链接,但是在更好地更改代码方面还没有成功。

java security traversal path-traversal
1个回答
0
投票
当您使用DOWNLOAD_PATH静态值时,假定它不为空,则不能注入绝对路径,因为'file'参数始终连接到静态值的末尾。因此,可以通过包含../。序列的“文件”值来注入路径遍历

我建议您添加以下检查并在代码进入块时引发异常

if (file.contains("../") || file.contains("..\\"))

如果要使用提供的链接的代码,则应将代码的最后一行替换为

 File downloadFile = new File(DOWNLOAD_PATH, FilenameUtils.getName(file));

注意,您应该导入Apache Commons IO中包含的org.apache.commons.io.FilenameUtils。如果您的项目是maven项目,请添加以下maven repository 。否则,您需要下载jar并将其放入类路径中。

© www.soinside.com 2019 - 2024. All rights reserved.