0


次の私のphpコードでリクエストが失敗する理由が見つかりませんでした:

if (isset($_COOKIE["user"])) {
   echo '<p><h3><strong>Welcome '.$_COOKIE["param"].'</strong></h3></p>'; .....

paramとしてリクエストexec('ls -al')すると、phpコードがコマンドを実行しませんでした。

リクエストの応答では、パラメータ化されたようでした。

Welcome exec('ls -al')

この実行に失敗した理由は何でしょうか?

4

2 に答える 2

2

$_COOKIE["param"]は文字列です。あなたはそれを反響させています。何も実行することは想定されていません。

PHP でコマンドを実行したい場合は、eval(). ただし、Cookie 値からコマンドを実行する場合は、次のようになります。

それをしないでください!

于 2013-01-22T22:30:39.213 に答える
0

つまり、 の値が であると言っているのです$_COOKIE['param']exec('ls -al')、それが実行されたときにそれが実行されることを期待していますechoか?

それはそれがどのように機能するかではありません。その Cookie の値は、実行されたコードの結果ではなく、文字列値"exec('ls -al')" になります。少し考えてみれば、Cookie がコードを自動実行できるようにすることがなぜ悪い考えなのかがわかるでしょう。

exec()とにかくランダムなコマンドを実行することは、特にその入力がユーザーからのものである場合は、本当に良い考えではありません(Cookie が行うこと - ユーザーは、あなたを攻撃しようとするためにそれらを変更することができます)。

代わりに、コードが特定のコードを実行するシグナルとして解釈できる他の入力を使用する必要があります。たとえば、param値に stringlist filesを保持させることができ、コードはその値を確認して実行exec('ls -al')します。

ただし、危険なコマンドを誤って実行するのは非常に簡単なので、これを行うためにコードを実行するべきではありませんexec代わりに、入力をサニタイズし、既知の値のみを実行した後で、PHP の組み込み関数を可能な限り使用する必要があります。

あなたの場合、PHPには、サーバーのファイルシステムとやり取りできる関数がたくさんあります。代わりに、それらを使用してシステム上のファイルのリストを取得してください。

于 2013-01-22T22:30:17.110 に答える