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

时间:2015-11-06 04:54:05

标签: java file

在Java中,可以构造一个不允许使用" .."的File对象。在孩子的争论中?有没有办法引用第二个arg,以便" .."没有工作,或者以这种方式构建File对象的其他命令?

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

File f = new File(PARENT, id);

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

f.delete();

用户的一个恶意行为可能是输入" ../../ some-important-file"为了id。

" ID"似乎可以消毒,或者可以使用某些功能来验证" id"实际上是一个有效的ID(例如,如果以" ../"开头,它将无效),而不是直接从用户输入构建文件,但我很好奇是否有以我描述的方式构建文件的方式(不允许" ..")。

感谢。

1 个答案:

答案 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);(假设PARENTFile),即它位于PARENT或某些路径中子目录。

您检查和处理这些问题的确切方式取决于您对目标强加的限制,取决于您是否可以在运行时异常中终止输入错误。