无法通过 AJAX 调用在 PHP 脚本中将参数作为命令的一部分传递
unable to pass parameters as part of command in PHP script through AJAX call
我正在尝试将开始时间和结束时间值从我的前端屏幕传递到 PHP 脚本,并尝试 运行 一个命令,其中传递了开始时间和结束时间的值,使用AJAX 电话。
我能够在屏幕上回显 start/end 时间,但是当我将它作为 $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 呼叫:
$(文档).ready(函数(){
$('#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");
}
});
});
});
原因
您应该使用双引号而不是单引号,因为像 '$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
}
我正在尝试将开始时间和结束时间值从我的前端屏幕传递到 PHP 脚本,并尝试 运行 一个命令,其中传递了开始时间和结束时间的值,使用AJAX 电话。
我能够在屏幕上回显 start/end 时间,但是当我将它作为 $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 呼叫: $(文档).ready(函数(){
$('#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");
}
});
});
});
原因
您应该使用双引号而不是单引号,因为像 '$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
}