在java中转义Shell命令?

2022-09-02 22:02:58

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

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

基本上在一个非常简化的例子中,我通过WS接收一些输入

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

then running somescript.pl <<data in <bar> field>> here

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

谢谢!


答案 1

我建议使用 ProcessBuilder 或 Runtime.exec 方法之一,这些方法不会在 shell 中运行,因此不需要 shell 转义来避免注入攻击(此处)。

考虑使用进程的STDIN管道来传输XML数据也可能是有益的 - Perl可以简单地处理来自STDIN的读取。命令行参数通常存在限制。

快乐编码。


答案 2

提供的补丁:https://issues.apache.org/jira/browse/LANG-1066

这确实是一个长期存在的问题。