我想知道将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>
答案 0 :(得分:1)
我想知道将ps aux放入数组然后在网络上显示的这种安全方法吗?或者可以采取哪些措施来改善它?
据我所知,没什么。如果这是实际代码并且命令不是从用户输入创建的,那么除了<table width="900px">
通常由CSS而不是HTML控制的事实之外,这个代码绝对没有任何问题。但这就是我能想到的所有批评。
编辑:Quentin提出了一个非常有效的观点,您应该在以HTML格式显示之前使用htmlspecialchars。
答案 1 :(得分:1)
htmlspecialchars
。有人可能正在使用<
或&
字符作为其命令行的一部分%
字符,它不需要CSS长度。答案 2 :(得分:0)
为了改进它,你可以稍微简化你的exec。
ps -C php -o args cpu | grep process.php
查看ps手册页中的“标准格式说明符”以获取所需的所有列。