gpt4 book ai didi

java - 构造文件对象禁用 ".."

转载 作者:太空宇宙 更新时间:2023-11-04 13:15:38 25 4
gpt4 key购买 nike

在 Java 中,是否可以构造一个不允许在子参数中使用“..”的 File 对象?是否有某种方法可以引用第二个参数,以便“..”不起作用,或者使用其他命令以这种方式构造 File 对象?

例如,用户输入可以指定 ID。然后可以使用该 ID 打开文件。

File f = new File(PARENT, id);

根据用户的其他参数,下一个命令可能是:

f.delete();

用户的一个恶意操作可能是输入“../../some-important-file”作为 id。

“id”似乎可以被清理,或者可以使用某些函数来验证“id”实际上是一个有效的ID(例如,如果它以“../”开头,则无效),而不是直接从用户输入构造一个文件,但我很好奇是否有一种方法可以按照我描述的方式构造一个文件(不允许“..”)。

谢谢。

最佳答案

据我所知,如果不以一种或另一种形式对支票进行编码,就无法完成您想要的操作。

如果您的目的只是在学术上声称您只使用了构造函数,那么您可以扩展 File 并自己提供构造函数。例如:

class SafeFile extends File {
SafeFile(File parent, String child) throws SecurityException {
super(parent,child);
try {
if(!getCanonicalPath().startsWith(parent.getCanonicalPath()))
throw new SecurityException(child+" is above the designated directory");
} catch(IOException e) {
throw new SecurityException("Cannot confirm safety");
}
}
}

只要文件的路径以其父路径开头,即位于 PARENT 或某个子目录中,则应仅允许 File f = new SafeFile(PARENT,id); (假设 PARENTFile)工作。

检查和处理这些问题的确切方式取决于您想要施加的限制,以及您是否同意在错误输入的运行时异常中终止。

关于java - 构造文件对象禁用 "..",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33559758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com