Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PHP-使用Exec执行带有用户定义参数的Jar文件_Java_Php_Security_Exec - Fatal编程技术网

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

Java PHP-使用Exec执行带有用户定义参数的Jar文件,java,php,security,exec,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]);

我有一个在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]);
现在我需要知道是否需要检查用户输入,因为在PHP页面的exec下,它显示:

允许将用户提供的数据传递到此函数时,请使用escapeshellarg()或escapeshellcmd()确保用户无法欺骗系统执行任意命令


但在我的例子中,用户输入仅用作应用程序的参数,如果我不检查用户设置了什么,是否存在任何安全风险,除了如果用户输入字符串或浮点数,程序将不会执行之外?

但在我的例子中,用户输入仅用作应用程序的参数


这就是你错的地方
exec()
就像是在命令行上执行一行。如果用户输入类似于:
;rm-rf/&echo
。必须使用
escapeshellargs()
对输入进行转义。或者最好在将其传递到命令行之前使用
floatval()。有很多shell黑客可以让用户逃避您的命令并在您的系统上执行任意命令。使用&&、管道等。

如果您不检查或转义您正在执行的命令行中注入的内容,这意味着任何人都可以向其中注入任何内容。这意味着在您的系统上执行任何类型的代码。而且,正如你可能猜到的,这可能是不好的

您必须始终正确地转义(尤其是)不安全的数据



在生成要由系统执行的命令时,应该使用该函数。

更好的是,使用';rm-rf…“-万一Java失败,rm仍将继续-如果您正在破坏服务器,请不要客气,让攻击取决于您正在注入参数的程序的成功。添加了一个简单的test.txt并尝试;最后一个参数末尾的del test.txt,以及;是否仍被视为java的参数?我正在使用Win7,也许有另一个命令开始新的指令?@Jernej Jerin这与java无关,您正在使用的是shell。在本例中,
exec()
正在使用cmd.exe。是的,我知道,但我尝试了cmd java-jar Clt.jar 1 100 1&&del test.txt,它确实删除了test.txt,而出于某种原因,使用完全相同的内容执行exec时不想删除test.txt?