我有一个程序,当用户执行某些操作时会启动浏览器窗口。我的程序需要管理员权限(即必须通过“以管理员身份运行”启动,或者在 Vista 或 Win7 中的清单文件中将 requestedElevationLevel 设置为 requireAdministrator)。
我担心浏览器会继承父进程的权限级别;也就是说,我担心浏览器也会以管理员权限启动。这是正确的吗?如果是这样,有什么方法可以防止这种情况发生吗?
答案1
UAC 是一个相当复杂的概念,很难理解。一般来说,子进程从父进程继承访问令牌。然而,这只有在两个进程具有相同的integrity level
:
每个需要管理员访问令牌的应用程序都必须提示管理员同意。唯一的例外是父进程和子进程之间的关系。子进程从父进程继承用户访问令牌。但是,父进程和子进程都必须具有相同的完整性级别。
完整性级别取决于多种因素,但一般来说,网络浏览器是low integrity
应用程序,并且如果它尝试执行任何需要更高级别权限的操作,则可能需要额外的 UAC 提示:
Windows 7 通过标记进程的完整性级别来保护进程。完整性级别是信任的衡量标准。完整性级别“高”的应用程序是指执行修改系统数据的任务的应用程序,例如磁盘分区应用程序,而完整性级别“低”的应用程序是指执行可能危及操作系统的任务的应用程序,例如 Web 浏览器。完整性级别较低的应用程序无法修改完整性级别较高的应用程序中的数据。
如果您想了解有关 UAC 的更多信息,以下文章是一个很好的资源:
答案2
你是对的。任何产生子进程的进程都会默认继承其安全上下文(无论是否为管理员)。
我不确定在不控制该程序源代码的情况下是否有办法解决这个问题(但我可能错了)。