Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.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
PHP exec()输出错误_Php - Fatal编程技术网

PHP exec()输出错误

PHP exec()输出错误,php,Php,我正在使用jQuery执行AJAX请求,如下所示: $.get({ url: 'run_program.php', data: 'action=run&number=' + $('#number').val(), success: function (j) { alert(j); } runprogram.php是这样的: <?php if(isset($_GET['actio

我正在使用jQuery执行AJAX请求,如下所示:

$.get({
          url: 'run_program.php',
          data: 'action=run&number=' + $('#number').val(),
          success: function (j) {
            alert(j);
          }
runprogram.php是这样的:

<?php
if(isset($_GET['action']) && !empty($_GET['action'])) {
    run($_GET['number']);
}

function run($number) {
    echo shell_exec('program.exe $number');
}
?>


我从服务器得到的响应总是0。顺便说一句,我正在本地运行,所以没有安全问题。该程序只需编码,以平方作为输入传入的数字。它在cmd中工作得非常好。当我回显$number时,它正确地给出了我使用jQuery传入的值。我的代码有什么问题?

问题在于你的线路

echo shell_exec('program.exe $number'); 
实际上,这将以“$number”作为文本作为值调用program.exe。你需要使用双引号

echo shell_exec("program.exe $number"); 

哎哟——
runprogram.php?数字=0;cat%20/etc/passwd
您正在将字面上的
program.exe$number
传递到shell。您需要将单引号更改为双引号:
“program.exe$number”
或将变量移到字符串之外:
“program.exe”。$number
@Alnitak,这与我要说的差不多。可怕的是,有多少次我们在堆栈溢出上发现了这种代码。请使用双引号和shell_exec()参数,否则$number不会被PHPI扩展。我不会对一个不会同时解决大规模安全问题的答案进行升级…@Alnitak为什么不?这完美地回答了这个问题。上面的评论突出了安全问题。@JonTaylor,因为这是不负责任的,也表明海报本身不知道安全问题。我知道安全问题,我只是想知道问题出在哪里,这完美地回答了问题。这根本不是不负责任。虽然我同意人们需要了解这些安全问题,但这个答案完美地回答了人们提出的问题。这家伙还有其他安全问题,这不是重点。