【发布时间】:2011-10-12 23:04:07
【问题描述】:
我需要做什么才能正确清理/转义正在输入到编程 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;
}
不安全的原因是路径参数可能来自用户上传的文件。从技术上讲,恶意用户可以上传带有无效文件名的文件。虽然我可以事先检查(我正在这样做),但我也想在这里检查一下。
【问题讨论】:
-
我想这取决于您所说的“无效”。
-
恶意。确保它本身没有进行“SSH 注入”...
-
只是反斜杠所有不“正常”的东西,所以它肯定是一个文件名,我猜?尤其是分号,当然。
-
是的,我认为这就是我要采取的方法。感谢您的建议。