2

アプリケーションのセキュリティを検証しようとしています。シナリオは次のとおりです
。AC# WinForms アプリケーションは、ターミナル サービス (デスクトップではなく、アプリのみ) を介して制限されたユーザーによって実行されます。この C# アプリでできることの 1 つは、昇格された特権で長いプロセスを実行するバッチ ファイルを実行することです。制限されたユーザーがバッチ スクリプト (vua Ctrl+C またはその他の方法) を中断して、基になる昇格されたシェルにアクセスできる可能性があるのではないかと心配しています。

Ctrl+C や Ctrl+Break などのさまざまな組み合わせを使用して、自分でこれを実行しようとしました。取得できるのは、「バッチ ジョブを終了しますか? (Y/N)」というプロンプトだけです。終了を選択すると、すぐに制御が開始されます。 C# アプリに戻りました (これは良いことです)。私はこれを破る方法を見つけていませんが、私には危険に思えます。

C# でインスタンス化されたバッチ スクリプトから抜け出し、C# アプリに戻らずに基になるシェルにアクセスする方法を知っている人はいますか?

4

3 に答える 3

2

いいえ、あるとは思わないでください。しかし、本当に心配なら、おそらく使用しているオブジェクトにCreateNoWindowプロパティを設定して、ユーザーの操作をまったく防止してみませんか?ProcessStartInfotrue

于 2012-07-04T16:31:32.250 に答える
0

説明したシナリオに対する完全な答えではありませんが、それを見る別の方法です。

可能であれば、ターミナルサービス実行アプリが作成するジョブを実行するのが唯一の責任である「ジョブサーバー」があります。次に、WCFを介してサーバーにジョブ(またはパラメーターのみ)を伝達します。ユーザーはサーバーにアクセスできず、ジョブをほとんど制御できません(おそらく、キャンセルオプションと成功/失敗ステータスレポートのみ)。

于 2012-07-04T16:41:46.553 に答える
0

このようなことを行うことができます(アプリのテキストボックスを使用)

ProcessStartInfo info = new ProcessStartInfo();
info.Arguments = "/C ping 127.0.0.1";
info.WindowStyle = ProcessWindowStyle.Hidden;
info.CreateNoWindow = true;
info.FileName = "cmd.exe";
info.UseShellExecute = false;
info.RedirectStandardOutput = true;
using (Process process = Process.Start(info))
{
    using (StreamReader reader = process.StandardOutput)
    {
        string result = reader.ReadToEnd();
        textBox1.Text += result;
    }
}

次に、ユーザーが実際にウィンドウをまったく見ることができなくても、バッチの結果を見ることができます。そのようにして、プロセスとしてのみ表示されるため、中断することはできません。

ここに画像の説明を入力

于 2012-07-05T08:36:01.157 に答える