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

标签 java file

在 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/

相关文章:

java - Spring Cloud API Gateway 自定义过滤对象上的 ClassCastException 到 Config

java - 扁虫从行号读取文件

python - 将目录中的所有文件加载为名为正在加载的文件名的变量?

C 将文件逐行读取到字符串数组中并排序

excel - 使用 VBA FileSystemObject,特定文件 文件扩展名

java - Android 自定义 View 不以正确的方式处理透明度/alpha

java - 查找具有不同对象的集合之间的交集

java - ClassCastException 错误

file - 创建 2 个文件并向它们写入与 Lisp 中另一个文件不同的内容

java - 发送文件到服务器java错误