プログラムによる SSH コマンドに入力されているパラメーターを適切にサニタイズ/エスケープするには、どうすればよいですか?
たとえば、パス パラメータ -
public boolean exists(String path) {
try {
ChannelExec c = (ChannelExec) session.openChannel("exec");
//Here *** would like to be sure that the path is completely valid
c.setCommand("[ -f " + path + " ] && echo \"File exists\" || echo \"File does not exists\"");
InputStream in = c.getInputStream();
c.connect();
ByteArrayOutputStream out = new ByteArrayOutputStream();
IOUtils.copy(in, out);
in.close();
out.close();
System.out.println(out.toString("UTF-8"));
c.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// TODO Auto-generated method stub
return false;
}
これが安全ではない理由は、path パラメーターがユーザーがアップロードしたファイルから取得される可能性があるためです。悪意のあるユーザーは技術的に、無効なファイル名のファイルをアップロードする可能性があります。これは事前に確認できますが(現在行っています)、ここでも確認したいと思います。