我正在尝试验证应用程序的安全性。场景是这样的:
C#WinForms应用程序由有限的用户通过终端服务运行(没有桌面,只有应用程序)。这个C#app可以做的事情之一是执行一个批处理文件,该文件使用提升的权限运行冗长的进程。我担心有限的用户可能会中断批处理脚本(vua Ctrl + C或其他一些方法)并获得对底层提升shell的访问权。
我已尝试使用Ctrl + C和Ctrl + Break等各种组合来完成此操作。我只能获得“Teminate批处理作业?(Y / N)”提示,如果选择终止,则控件立即返回到C#app(这很好)。我没有找到办法打破这一点但对我来说似乎很危险。
有没有人知道如何在不返回C#应用程序的情况下打破C#实例化批处理脚本并访问底层shell?
答案 0 :(得分:2)
不,不要以为有一个。但是,如果你真的很担心,为什么不将你可能使用的CreateNoWindow
对象上的ProcessStartInfo
属性设置为true
以阻止用户进行交互?
答案 1 :(得分:0)
对你所描述的场景不是一个完全的答案,而是以不同的方式来看待它。
如果可能的话,我会有一个“工作服务器”,他自己负责运行终端服务运行的应用创建的工作。然后,您将通过WCF将作业(或仅参数)传达给服务器。用户无法访问服务器,几乎无法控制作业(可能只是取消选项和成功/失败状态报告)。
答案 2 :(得分: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;
}
}
然后您可以看到批处理的结果,而用户根本无法真正看到窗口,这样它只能作为一个进程显示,因此无法中断它。