вывод "ps aux" на веб-странице? - PullRequest
4 голосов
/ 08 июля 2011

Мне интересно, это безопасный способ поместить 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 ]

1 голос
/ 08 июля 2011
  1. Всегда используйте htmlspecialchars при отображении текста в HTML-документе. Кто-то может использовать символ < или & как часть своей командной строки
  2. ps aux покажет все команды, запущенные в системе, в том числе те, где кто-то добавил пароль в командной строке
  3. Не проблема безопасности, но устаревший атрибут ширины HTML принимает целое число, за которым необязательно следует символ %, это не займет длину CSS.
  4. Также не проблема безопасности, но вы должны использовать элементы заголовка таблицы элементы для заголовков таблицы.
1 голос
/ 08 июля 2011

Мне интересно, это безопасный способ поместить ps aux в массив и затем отобразить в Интернете?Или что можно сделать, чтобы улучшить его?

Ничего, насколько я могу судить.Если это реальный код и команда не создана из пользовательского ввода, в этом коде нет ничего плохого, кроме того факта, что <table width="900px"> обычно контролируется CSS, а не HTML.Но это все, о чем я могу подумать.

EDIT : Квентин делает очень верное замечание, что вы должны использовать htmlspecialchars перед отображением в HTML.

0 голосов
/ 01 июня 2013

Чтобы улучшить его, вы можете немного упростить свой exec.

  • ps может искать имена процессов, используя опцию -C.
  • и вы можете вручную перечислить столбцы, которые хотите прочитать, используя опцию -o. Таким образом, вы всегда будете получать предсказуемый вывод, даже если команда ps aux изменится или что-то еще.

ps -C php -o args ЦП | grep process.php

Посмотрите "Стандартные спецификаторы формата" на странице справочника ps, чтобы получить все нужные вам столбцы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...