0

私は2つのサーバーを持っています。最初の Web サーバーは別の Linux サーバーです。Webサーバーで、Linuxサーバーに接続するphpスクリプトを作成し、ユーザー入力後にコマンドを実行します。この場合、Linux サーバーで実行されるコマンドは同じではありません。例:

<input type="text" name="input">

....

$user_input = $_POST["input"]

....

if (!($stream = ssh2_exec($con, "cat $user_input | grep some_text"))) {
            echo "fail: unable to execute command\n";
        } 

ここで、変更可能な変数を持つコマンドを 1 つだけユーザーに許可する必要があります。ユーザーは ex に対してのみ与えることができます。「cat」と「grep」コマンドですが、「$user_input」は毎回変わります。状況を解決する方法はありますか?

4

2 に答える 2

0

私が知っている唯一の信頼できる (そして比較的安全な) 方法は、コマンド テンプレートを使用することです。

概念。Web フロントエンドは、任意のコマンドを許可しません。代わりに、チェック/型指定されたパラメーターを含む可能なコマンド テンプレートのリストを提供します。Web インターフェイスでは、ユーザーはテンプレートを選択し、パラメーターを指定できます。選択されたテンプレートとパラメーターは、バックエンドに渡され、カプセル化されます (検証済みの XML など)。バックエンドは、最初にユーザーが指定したパラメーターがテンプレートに適合することを確認し、次にコマンドを構成してから実行します。

たとえば、コード スニペットを使用すると、考えられるテンプレート仕様は次のようになります。

grep-file ::= cat <local-readable-file> | grep <safe-text>

たとえば、local-readable-fileファイル名に安全な文字のみが含まれていること、ファイルが正規のものであること、ローカル ファイル システム上にあること、誰でも読み取り可能であることなどを確認できます。たとえば、safe-textの場合、英数字のみが含まれています。

于 2015-04-29T09:36:18.633 に答える