Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Javas文件构造函数可以进行路径遍历吗?_Java_Security_Path Traversal - Fatal编程技术网

使用Javas文件构造函数可以进行路径遍历吗?

使用Javas文件构造函数可以进行路径遍历吗?,java,security,path-traversal,Java,Security,Path Traversal,我正在构建一个Web服务,用户可以上传解压缩后保存到服务器上的ZipFile文件 我创建了以下函数以在指定路径中打开文件: private File secureOpenFile(String fileName, String directorypath){ return new File(directorypath, fileName); } 但安全扫描告诉我,这是不安全的,因为它有路径遍历的可能性。提供参数(“../../notsafe”,“uploadfolder”)将允

我正在构建一个Web服务,用户可以上传解压缩后保存到服务器上的ZipFile文件

我创建了以下函数以在指定路径中打开文件:

private File secureOpenFile(String fileName, String directorypath){
        return new File(directorypath, fileName);
}
但安全扫描告诉我,这是不安全的,因为它有路径遍历的可能性。提供参数(“../../notsafe”,“uploadfolder”)将允许恶意攻击者覆盖其他文件

但是,在文件类的文档中,我发现了以下内容:

否则,父抽象路径名表示目录,子路径名字符串表示目录或文件。如果子路径名字符串是绝对的,则会以系统相关的方式将其转换为相对路径名。如果parent是空的抽象路径名,则通过将child转换为抽象路径名并根据依赖于系统的默认目录解析结果来创建新的文件实例。否则,每个路径名字符串将转换为抽象路径名,子抽象路径名将根据父抽象路径名解析

我解释为:不离开父文件夹。我说的对不对?这个密码安全吗?如果现在:解决此安全问题的最佳方法是什么?

是的,这是可能的

…已针对父级解析子抽象路径名

仅表示在解析子路径时父路径用作基础,但如果子路径包含
,则结果将在父路径之外

例如

结果是
/Users/example/projects/sample/pom.xml
,因此超出了
目标

因此,简言之,是的,你确实需要自己对此加以防范。

是的,这是可能的

…已针对父级解析子抽象路径名

仅表示在解析子路径时父路径用作基础,但如果子路径包含
,则结果将在父路径之外

例如

结果是
/Users/example/projects/sample/pom.xml
,因此超出了
目标


所以,简言之,是的,您确实需要自己防范这种情况。

您是否从用户处获取参数中的任何输入?嘿,ProgrammerBoy。第二个参数,filename,来自用户上传的zipfile。我怀疑用户可以在这个zipfile中输入任何奇怪的东西,所以我不相信那个输入…你们从用户那个里接受参数中的任何输入吗?嘿,ProgrammerBoy。第二个参数,filename,来自用户上传的zipfile。我怀疑用户可以在这个zipfile中放入任何奇怪的内容,所以我不相信这个输入。。。
new File("/Users/example/projects/sample/target", "../pom.xml").getCanonicalFile();