1

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);
}

この問題を修正するための提案はありますか?

4

2 に答える 2

2

URLを使用している場合は、そこからプロトコルを取得できます。その場合、プロトコルが「ファイル」である場合(または、制限の程度によっては「http」ではない場合)、例外をスローできます。

于 2013-01-15T21:50:22.397 に答える
1

特定のフォルダへのアクセスが制限されているユーザーの下でこのプロセスを実行します。これはOSレベルで処理され、OSは定義された権限によってプロセスを許可します。

于 2013-01-15T21:36:42.553 に答える