2011-05-24 36 views
14

我有一个web服务,它将认证机器的一些输入作为XML(这是一个网络管理系统,我正在与其他一些软件进行集成),并执行一些带有一些XML数据的shell脚本作为参数。转义shell命令在java中?

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

在一个非常简化的例子

基本上,林通过WS

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

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

我需要确保这不能被用来执行任意shell命令等采取一些输入英寸

谢谢!

+0

哪个外壳?不同的炮弹有不同的逃避惯例。 – 2011-05-24 18:56:54

+1

这个问题说明了Linux上的Java。 – 2011-05-24 19:06:07

+1

@Gweebz,它不回答“哪个shell?”的问题。 Linux有许多不同的shell。 – Kaj 2011-05-24 19:09:45

回答

12

我会使用的ProcessBuilder或的方法的Runtime.exec其中贯穿于外壳一个建议,因此不需要外壳转义避免注入攻击(在这里)。

它还可能有利于考虑使用过程中的标准输入管道来传输XML数据的形式 - Perl可以平凡处理从标准输入读。命令行参数通常有限制。

快乐编码。提供

+1

真的是一个明智的答案。如果你以前没有,我会一个接一个地写出来。 +1 – gd1 2011-05-24 20:16:03

+0

感谢您的提示,翔实的答案! – Yablargo 2011-05-24 20:56:51

0

如果你不能使用ProcessBuilder,你可以考虑Apache commons-text escapeXSI。 (不要在意这个名称 - XSI是X/Open System Interfaces Extension,它是对Single UNIX Specification的补充规范,所以所有试图像UNIX一样的东西都或多或少地符合这一点)。