2

我正在尝试验证应用程序的安全性。场景是这样的:
AC# WinForms 应用程序由有限的用户通过终端服务(没有桌面,只有应用程序)运行。这个 C# 应用程序可以做的一件事是执行一个批处理文件,该文件以提升的权限运行一个冗长的进程。恐怕受限用户可能会中断批处理脚本(vua Ctrl+C 或其他方法)并获得对底层提升外壳的访问权限。

我自己尝试使用 Ctrl+C 和 Ctrl+Break 等的各种组合来执行此操作。我能得到的只是“终止批处理作业?(Y/N)”提示,如果您选择终止,则立即进行控制返回到 C# 应用程序(这很好)。我还没有找到解决这个问题的方法,但这对我来说似乎很危险。

有谁知道打破 C# 实例化批处理脚本并在不返回 C# 应用程序的情况下访问底层 shell 的方法?

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 回答