PHP exec()输出错误
我正在使用jQuery执行AJAX请求,如下所示: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
$.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,因为这是不负责任的,也表明海报本身不知道安全问题。我知道安全问题,我只是想知道问题出在哪里,这完美地回答了问题。这根本不是不负责任。虽然我同意人们需要了解这些安全问题,但这个答案完美地回答了人们提出的问题。这家伙还有其他安全问题,这不是重点。