无法通过AJAX调用

时间:2015-07-27 21:47:46

标签: php jquery ajax phpseclib

我正在尝试将开始时间和结束时间值从我的前端屏幕传递到PHP脚本,并尝试使用AJAX调用运行一个命令,其中包含开始时间和结束时间的传递值。

我能够在屏幕上回显开始/结束时间,但是当我在$ ssh-> exec()中将其作为命令的一部分传递时;我无法运行它。你有什么输入,为什么我不能作为命令的一部分传递?

 $stime= $_POST['stime'];
 $etime = $_POST['etime'];

  echo $stime; // SUCCESS  ( 2015-07-27 16:32:23 )

  echo $ssh->exec('/tpo/umc/bin/monitoring_dump -n r02xy01 -m -t0 $stime -t1 $etime -f line> /tmp/adwant.txt');

AJAX CALL: $(document).ready(function(){

    $('#button').click(function () {
        alert("first")
        $.ajax({

            type: "POST",
            crossDomain: true,
            url: "http://localhost:8182/ElitePass/login.php",
            data: {

                stime: $("#demo1").val()
                etime: $("#demo2").val()
            },

            success: function(data){
                alert(data)
                $('#resultip').html(data);
            },
            error:function(data)
            {
                alert("Data sending failed");
            }
        });

    });
});

1 个答案:

答案 0 :(得分:1)

<强>原因

您应该使用双引号而不是单引号,因为'$stime'之类的变量不会被PHP解释。

<强>解

请参阅以下更正的代码:

echo $ssh->exec("/tpo/umc/bin/monitoring_dump -n r02xy01 -m -t0 $stime -t1 $etime -f line> /tmp/adwant.txt");

备注

然而,在未经验证的情况下将参数传递给shell是一个大安全漏洞,应该避免使用。

您需要验证$stime$etime参数,以确保它们符合您期望的格式(2015-07-27 16:32:23)。

例如:

$is_stime_valid = preg_match('/^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}$/', $stime);
$is_etime_valid = preg_match('/^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}$/', $etime);

if($is_stime_valid and $is_etime_valid){
   echo $ssh->exec("/tpo/umc/bin/monitoring_dump -n r02xy01 -m -t0 $stime -t1 $etime -f line> /tmp/adwant.txt");
} else {
   # Error: invalid parameters
}