URLを使用してリモートファイルをフェッチする機能を備えたJavaWebアプリケーションがあります。
コードをテストしているときに、匿名ユーザーがファイルのパスを変更することでローカルファイルを読み取ることが可能であり、ファイルのURLスキーマにファイルが読み取られることがわかりました。/etc/passwd
ファイルはURLfile:///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);
}
この問題を修正するための提案はありますか?