Web から CLI コマンドを実行する (比較的) 安全な方法はありますか?

Web から CLI コマンドを実行する (比較的) 安全な方法はありますか?

LAMP アプリのプログラミングを始めたときから、ボックス用の管理コントロール パネルを開発したいと思っていました。(楽しみと教育の目的のため。そうでなければ、市場にすでに存在するものを使用します)

しかし、私がいつも止めていたのは、exec() 関数 (私が知っている限り、これを実現する唯一の方法) は悪だといつも聞いていたからです...つまり、「使用しないでください」、「コーディングが悪い」などです。

その目的のためのより安全な代替案について聞いたことがないので、私の質問は次のとおりです。

何かありますか?

パスワードで保護されたドキュメント ルートを持つ専用の Web サーバーでそのアプリを実行するだけでは十分ではないでしょうか?

まあ、それが私の疑問です。

答え1

本当のリスクは、ユーザーからの入力をこれらのいずれかに混ぜる場合だと思いますexec()。これが、ほとんどのリスクが発生する場所です。ユーザーからの入力を許可しているため、それが CLI に混ぜられると、テキスト ボックスにセミコロン ( ;) を挿入したり、引数を指定した後に追加のコマンドを実行したりするなど、危険なことが起こる可能性があります。

したがって、一般的に、読み取り専用でコマンドを実行することは、他の操作を実行する場合よりも危険ではありません。

これは基本的に、皆さんもよくご存知の SQL インジェクション攻撃と同じ問題です。

答え2

私の知る限りでは (私はプログラマではないので、あまり信じないでください)、exec()呼び出しはまったく悪ではありません。 呼び出しによって新しいプロセスが分岐し、システム関数を呼び出すためオーバーヘッドが大きくなるというだけです。 一般的に、作成するプログラムやスクリプトの内部で処理を行い、 のような外部呼び出しを避けることが推奨されていますexec()

ただし、システム上でコマンドを実行することが目的である場合、このような呼び出しなしでは実行できません。もちろん、セキュリティ上のリスクがあり、ランダムなユーザーがサーバー上で任意のコマンドを実行できるようにすると、問題が発生する可能性があります。ただし、このサーバーへのアクセスが厳しく制限されている場合は、安全に実行できるはずです。

とにかく、主な結論としては、exec()関数は本質的に悪いわけではなく、単に内部で何かを行うよりも効率が悪くなる傾向があるだけです。

関連情報