我想知道这是安全的方式,把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>
我想知道这是安全的方式,把ps aux到数组,然后在网络上显示?或者可以做些什么来改善它?
据我所知没有。如果这是实际的代码,并且命令不是由用户输入创建的,那么除了<table width="900px">
通常由CSS而不是HTML控制之外,这段代码绝对没有任何问题。但这就是我能想到的所有批评。
EDIT: Quentin提出了一个非常有效的观点,即在HTML中显示之前应该使用htmlspecialchars
- 在HTML文档中显示文本时始终使用
htmlspecialchars
。有人可能会使用<
或&
字符作为命令行 的一部分。 - ps aux将显示系统上运行的任何命令-包括任何人在命令行中包含密码的任何地方
- 没有安全问题,但是弃用的HTML宽度属性接受一个整数,后跟一个
%
字符,它不接受CSS长度。 - 也不是安全问题,但你应该使用表格标题元素作为你的表格标题。
要改进它,您可以简化您的执行。
- ps可以使用-C选项为您查找进程名。
- ,您可以使用-o选项手动列出要读取的列。这样,即使ps aux命令发生变化或其他情况,您也将始终获得可预测的输出。
ps -C php -o参数cpu | grep process.php
查看ps手册页中的"Standard Format Specifiers"以获得所需的所有列。