1

我有一个 Java Web 应用程序,它具有使用URL获取远程文件的功能。

在测试代​​码时,我发现匿名用户可以通过修改文件的路径来读取本地/etc/passwd文件:file:///etc/passwd

String remoteUrl = "file:///etc/passwd"; // some url we got from anonymous user
URL url = new URL(remoteUrl);
byte data[] = new byte[1024];
int length;

BufferedInputStream inputStream = new BufferedInputStream(url.openStream());

ServletOutputStream outputStream = response.getOutputStream();
// OR PrintStream outputStream = System.out;

while( (length = inputStream.read(data, 0, 1024)) >= 0 ) {
    outputStream.write(data, 0, length);
}

有关解决此问题的任何建议?

4

2 回答 2

2

如果您使用 URL,则可以从中获取协议。在这种情况下,如果协议是“文件”(或者不是“http”,具体取决于您想要的限制程度),您可以抛出异常

于 2013-01-15T21:50:22.397 回答
1

在对某些文件夹具有受限访问权限的用户下执行此过程。这将在操作系统级别处理,并且操作系统将通过定义的权限允许该进程。

于 2013-01-15T21:36:42.553 回答