在 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);
(假设 PARENT
是 File
)工作。
检查和处理这些问题的确切方式取决于您想要施加的限制,以及您是否同意在错误输入的运行时异常中终止。
关于java - 构造文件对象禁用 "..",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33559758/