0

QTcp* を使用してサーバー/クライアント接続を確立できるアプリケーションを開発しています

クライアントはサーバーに番号を送信します。

受信した文字列は、その長さと品質がチェックされます (それは本当に数字ですか?)

すべてが OK の場合、サーバーはファイル パス (送信された番号によって異なります) を返します。

クライアントは、ファイルが存在するかどうか、および有効なイメージであるかどうかを確認します。ファイルがルールに準拠している場合、ファイルに対してコマンド実行します。

このタイプの接続には、どのようなセキュリティ上の懸念がありますか?

このプログラムは Linux システム用に設計されており、イメージ ファイルに対する外部コマンドは QProcess を使用して実行されます。送信された文字列に次のようなものが含まれている場合 (次のコマンドを実行しないでください):

; rm -rf /

次に、ファイルが見つからないセキュリティ チェックでブロックされます (ファイル パスではないため)。送信された文字列の有効性についてチェックが行われなかった場合、次のコマンドが実行されます。

command_to_run_on_image ; rm -rf /

それはパニックを引き起こすでしょう!しかし、これは起こり得ません。

それで、私が考慮すべきことはありますか?

4

1 に答える 1

0

コンソールを開いて と入力するとcommand ; rm -rf /*、何か問題が発生する可能性があります。これは、コマンドがシェルによって処理されるためです。テキスト出力を解析します。たとえば、コマンドを;区切り文字で分割し、引数をスペースで分割し、システム API を使用して解析済み引数で解析済みコマンドを実行します。

しかし、 を使えばprocess->start("command", QStringList() << "; rm -rf /*");そのような危険はありません。QProcessシェルを実行しません。commandシステム API を使用して直接実行されます。command "; rm -rf /*"結果は、シェルで実行した場合と同様になります。

したがって、コマンドのみが実行され、パラメーターがそのまま渡されることを確認できます。唯一の危険は、攻撃者が作成できる任意のファイル パスでコマンドを呼び出す可能性があることです。結果は、コマンドが何をするかによって異なります。

于 2013-08-14T21:13:07.160 に答える