PHP - 使用Exec执行带有用户定义参数的Jar文件

时间:2011-03-04 17:24:40

标签: java php security exec

我在php中有一个工作exec执行Jar文件并返回结果:

exec('java -jar Clt.jar ' . $sampleSize . ' ' . $numberOfSamples . ' ' . $randAlgorithm,  $output);

在Java应用程序中以下列方式检查这些参数:

int sampleSize = Integer.parseInt(args[0]);
int numberOfSamples = Integer.parseInt(args[1]);
int randGenerator = Integer.parseInt(args[2]);

现在我需要知道如果我需要检查用户输入,因为在exec下的PHP页面上,它说:

  

当允许将用户提供的数据传递给此函数时,请使用escapeshellarg()或escapeshellcmd()以确保用户不会欺骗系统执行任意命令。

但在我的情况下,用户输入仅用作应用程序的参数,是否有任何安全风险如果我不检查用户设置的内容,那么如果用户输入字符串或浮点数,该程序将不会执行?

3 个答案:

答案 0 :(得分:2)

But in my case, where user input is used only as parameter for application

这就是你错了。 exec()就像在命令行上执行一行一样。如果用户输入的内容如下:; rm -rf / && echo,该怎么办?您必须使用escapeshellargs()转义输入。或者在将floatval()传递给命令行之前更好地使用{{1}}。

答案 1 :(得分:0)

绝对。有很多shell hacks可以让用户逃脱命令并在你的系统上执行任意命令。使用&&,管道等......

答案 2 :(得分:0)

如果你没有检查也没有逃避你正在执行的命令行注入的内容,这意味着任何人都可以注入任何东西。这意味着在您的系统上执行任何类型的代码。并且,正如您可能猜到的那样,这可能是糟糕

您必须始终正确转义(特别是)不安全的数据!


构建要由系统执行的命令时,应使用escapeshellarg()函数。

相关问题