我有一个 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);
}
有关解决此问题的任何建议?