0

我对 $_POST 和 $_GET 有严重的问题。我是 php 新手。一周前才开始。

我有一个 html 表单,它调用 php 来执行操作。

<html><body>
<form action="ls_sample1.php" method="post">Submission ID: <input type="text" name="sub_id" />
<input type="submit"/></form>
</body></html>

我有一个接受 sub_id 并执行系统命令的 php

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
?>

<?php
$input = $_POST['sub_id'];
echo "Entered submission id is $input";
system('/auto/ash/g2k/bin/gt -F stat -s $input',$ret);
if($ret) {
 echo "its invalid input because return value is $ret";
}
?>

忽略上面代码中的命令。它就像任何其他 unix 命令一样。当我在 shell 中执行时,一切正常,返回值为 0。当我在浏览器中执行时,返回值为 1,没有执行任何操作。但是提交 id 正在传递给 php.ini。

浏览器输出:输入的提交 id 为 0000268801 其无效输入,因为返回值为 1

我在这里错过了什么吗?请帮忙。

4

1 回答 1

4

所以不行。不要这样做。

如果有人提交表单,使得输入字段包含以下内容:

 ; rm -rf ~/ #

那你就有麻烦了。它们可能比仅仅删除所有文件更具恶意。

看看escapeshellarg

WRT你的错误:

返回代码 1 通常表示一般(未指定)错误。有时 PHP 会将某些内容转储到您的错误日志中,这可能会有所帮助。您可以检查以确保您的 apache 用户确实有权运行该程序,并且您的 php.ini 文件中没有任何内容会干扰。

所有简单的解决方案都失败了,我会做的是straceApache 实例,看看会发生什么。这有点高级,但是如果您知道如何使用该工具,那么它是必不可少的。我会暂时更改 apache 配置,以便只有一个 apache 工作进程,使用 strace 附加到它并将输出转储到文件中。然后在文件中搜索可执行文件的名称,并从那里跟踪执行链。最终你会遇到错误,看看它是什么。您可能还需要注意-sstrace 选项(它控制截断字符串-w的位置),它设置输出文件,-t或者-tt添加时间戳。

请不要让我解释如何做所有这些事情;它需要页面。

于 2012-10-24T20:56:23.907 回答