网页上的“ps aux”输出?

时间:2011-07-08 09:57:19

标签: shell exec php

我想知道将ps aux放入数组然后在网络上显示的安全方法吗?或者可以采取哪些措施来改善它?

示例:

<table width="900px" border="1">
    <tr> 
        <td> PID </td>
        <td> CPU </td>
        <td> Mem </td>
        <td> Start </td>
        <td> Command</td>
    </tr>
    <?php
    exec("ps aux | grep -v grep | grep  process.php", $psOutput);
    if (count($psOutput) > 0) {
        foreach ($psOutput as $ps) {
            $ps = preg_split('/ +/', $ps);
            $pid = $ps[1];
            $cpu = $ps[2];
            $mem = $ps[3];
            $time = $ps[8];
            $command = $ps[10] . " " . $ps[11];
            echo "<tr>";
              echo "<td>" . $pid . "</td>";
              echo "<td>" . $cpu . "</td>";
              echo "<td>" . $mem . "</td>";
              echo "<td>" . $time . "</td>";
              echo "<td>" . $command . "</td>";
            echo "</tr>";
        }
    }
    ?>
</table>

3 个答案:

答案 0 :(得分:1)

  

我想知道将ps aux放入数组然后在网络上显示的这种安全方法吗?或者可以采取哪些措施来改善它?

据我所知,没什么。如果这是实际代码并且命令不是从用户输入创建的,那么除了<table width="900px">通常由CSS而不是HTML控制的事实之外,这个代码绝对没有任何问题。但这就是我能想到的所有批评。

编辑:Quentin提出了一个非常有效的观点,您应该在以HTML格式显示之前使用htmlspecialchars。

答案 1 :(得分:1)

  1. 在HTML文档中显示文本时始终使用htmlspecialchars。有人可能正在使用<&字符作为其命令行的一部分
  2. ps aux将显示系统上运行的所有命令 - 包括某人在命令行中包含密码的任何地方
  3. 不是安全问题,但弃用的HTML width属性采用一个整数,后跟一个%字符,它不需要CSS长度。
  4. 也不是安全问题,但您应该使用table heading元素作为表格标题。

答案 2 :(得分:0)

为了改进它,你可以稍微简化你的exec。

  • ps可以使用-C选项为您查找进程名称。
  • 您可以使用-o选项手动列出要读出的列。这样,即使ps aux命令发生变化,也总能得到可预测的输出。

ps -C php -o args cpu | grep process.php

查看ps手册页中的“标准格式说明符”以获取所需的所有列。