在Java中转义Shell命令?

Yab*_*rgo 14 java shell escaping

我有一个web服务,它将从经过身份验证的计算机上获取一些输入作为XML(这是我与其他软件集成的网络管理系统)并执行带有一些XML数据作为参数的shell脚本.

在Java(/ Linux)中,逃避shell命令以确保某人无法将恶意参数传递给我的Web服务的最佳方法是什么?

基本上在一个极其简化的例子中,我在via WS中输入了一些内容

<foo>
<bar>ABCDEF</bar>
</foo>

then running somescript.pl <<data in <bar> field>> here
Run Code Online (Sandbox Code Playgroud)

我需要确保这不能用于执行任意shell命令等.

谢谢!

小智 12

我建议使用ProcessBuilder或其中一个通过shell运行的Runtime.exec方法,因此不需要shell转义以避免注入攻击(此处).

考虑使用进程的STDIN管道来传输XML数据也是有益的 - Perl可以轻松地处理从STDIN读取.命令行参数通常有限制.

快乐的编码.