在Java中,可以构造一个不允许使用" .."的File对象。在孩子的争论中?有没有办法引用第二个arg,以便" .."没有工作,或者以这种方式构建File对象的其他命令?
例如,用户输入可以指定ID。然后可以使用该ID打开文件。
File f = new File(PARENT, id);
根据用户的其他参数,下一个命令可能是:
f.delete();
用户的一个恶意行为可能是输入" ../../ some-important-file"为了id。
" ID"似乎可以消毒,或者可以使用某些功能来验证" id"实际上是一个有效的ID(例如,如果以" ../"开头,它将无效),而不是直接从用户输入构建文件,但我很好奇是否有以我描述的方式构建文件的方式(不允许" ..")。
感谢。
答案 0 :(得分:0)
据我所知,如果不以某种形式对支票进行编码,就没有办法做你想做的事。
如果您的目标只是声称学术上声称您只使用了构造函数,那么您可以扩展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");
}
}
}
只有当文件的路径以其父路径开头时,才应允许File f = new SafeFile(PARENT,id);
(假设PARENT
是File
),即它位于PARENT
或某些路径中子目录。
您检查和处理这些问题的确切方式取决于您对目标强加的限制,取决于您是否可以在运行时异常中终止输入错误。