0

こんにちは、PHP exec() と passthru() についていくつか質問があります。

1)
PHPでexec()を使用したことはありませんが、imagemagickで使用されることがあります。私は今興味があります.execがWebアプリケーションで優れている他の一般的な用途は何ですか?

2)
約 6 年前、私が最初に PHP をいじり始めたとき、私は本当に何も知らず、非常に基本的なことしか知りませんでした。サイトが侵害され、誰かが passthru() 関数を使用して渡す独自の PHP ファイルをセットアップしていました。無料の音楽やビデオをダウンロードするために私のサイトを介して大量のトラフィックが発生し、ホストから 4,000 ドルの帯域幅料金を請求されました! 6 年後、私は PHP の使用方法について非常に多くのことを知っていますが、以前にこれがどのように起こったのかはまだわかりません。不正なコードを介してサーバーにファイルを追加するにはどうすればよいですか?

4

3 に答える 3

4

1] Exec() は、次の場合に非常に役立ちます。

A) php に相当するコマンドがないサーバー上でプログラム/ユーティリティを実行したい。たとえば、ffmpeg は、exec 呼び出しを介して実行される一般的なユーティリティです (あらゆる種類のメディア変換用)。

B) 別のプロセスを実行する - ブロックすることもブロックしないこともできます - これは非常に強力です。ただし、ノンブロッキングの正しい CL 引数とともに pcnt_fork などを指定することもあります。

C) もう 1 つの例は、XSLT 2.0 を処理する必要がある場合です。変換を処理するために実行している小さな Java サービスを exec() する必要があります。とても便利な。PHP は XSLT 2.0 変換をサポートしていません。

2] くそー、それは残念です。まあ、たくさんの方法。「リモート ファイル インクルード脆弱性」と呼ばれる一連の脆弱性があり、基本的に、攻撃者が任意のソースを含めてサーバー上で実行することを可能にします。見てみましょう: http://lwn.net/Articles/203904/

また、上記のように、次のようなことを言ってください(非常に単純化されています):

exec("someUnixUtility -f $_GET['arg1']"); 

さて、攻撃者が url.come?arg1="blah;rm -rf /" を実行すると想像してみてください。コードは基本的に次のように要約されます。

exec("someUnixUtility -f blah; rm -rf /");

UNIX では、コマンドを ; で区切ります。ええ、それは大きな損害になる可能性があります。

ファイルのアップロードと同じように、拡張子を見つけるために最後の 4 文字 (.ext) を削除するとします。さて、この "exploit.php.gif" のようなものはどうでしょうか。次に拡張子を削除すると、exploit.php が作成され、それを /users/imgs/ フォルダーに移動します。攻撃者は、users/imgs/exploit.php を参照するだけで、必要なコードを実行できます。その時点であなたは所有されています。

于 2010-01-08T22:24:15.407 に答える
1
  1. exec別のプログラムを実行する場合は、またはを使用します。

  2. パススルーのドキュメントには次のように書かれています。

警告

ユーザー提供のデータをこの関数に渡すことを許可する場合は、escapeshellarg()またはescapeshellcmd()を使用して、ユーザーがシステムを騙して任意のコマンドを実行できないようにします。

誰かがスクリプトにセキュリティ ホールを見つけて、任意のコマンドを実行できるようになった可能性があります。指定された関数を使用して、次回入力をサニタイズします。クライアントから送信されたものは決して信頼できないことを覚えておいてください。

于 2010-01-08T22:11:13.380 に答える
0

exec()サーバー上にあるコンパイル済みコードを使用できます。これは、解釈される php よりも高速に実行されます。

そのため、迅速に実行する必要がある大量の処理があるexec()場合に役立ちます。

于 2010-01-08T21:58:38.223 に答える