2011-07-08 10 views
4

ps auxを配列に入れてWeb上に表示するこの安全な方法は不思議です。それを改善するために何ができるのでしょうか?ウェブページ上に「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> 

答えて

1

は、配列にPSの補助を配置し、Web上で表示するには、この安全な方法は何ですか?それを改善するために何ができるのでしょうか?

私には限りません。これが実際のコードであり、コマンドがユーザーの入力から作成されていない場合は、<table width="900px">は一般にHTMLではなくCSSによって制御されるという点を除いて、このコードには何も問題はありません。しかし、それは私が考えることができるすべての批判です。

EDIT:Quentinは、HTMLで表示する前にhtmlspecialcharsを使用する必要があるという点で非常に有効です。

1
  1. HTMLドキュメントにテキストを表示するときは、常にhtmlspecialcharsを使用してください。誰かが
  2. そのコマンドラインの一部として<または&文字を使用している可能性があり、PSの補助は、システム上で実行されている任意のコマンドが表示されます - いずれかの誰かが、コマンドラインでパスワード
  3. ないセキュリティ上の問題が含まれていることをどこ含むが、推奨されていないHTMLのwidth属性は、任意に0xという文字が続く整数を取りますが、CSSの長さは使用されません。
  4. セキュリティ上の問題ではありませんが、テーブル見出しにはtable heading要素を使用する必要があります。
+1

彼はすでに "process.php"をグレープしているので、コードは "すべてのコマンド"を表示しません。単にprocess.phpを含むものだけです。しかし、htmlspecialchars上の良い点。 –

0

これを改善するために、あなたのexecを少し簡略化することができます。

  • psは、-Cオプションを使用してプロセス名を検索できます。
  • であり、-oオプションを使用して読み込みたい列を手動でリストすることができます。そうすれば、ps auxコマンドが変更されても、予測可能な出力が得られます。

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

psのマニュアルページの「標準フォーマット指定子」を参照して、必要なすべてのカラムを取得してください。

関連する問題