c++ - Windows下"Standard I/O only"权限

标签 c++ winapi sandbox administration stdio

我想设置一个 online judge (自动测试软件;采用潜在的恶意代码并对其运行一些测试)在 Windows 上,但此类软件通常是为 *nix 系统编写的,因为在那里沙盒代码更容易。目前看来我必须自己编写。

  1. 如何以一种方式编译 C++ 代码以防止除 stdin/stdout 之外的任何行为?
  2. 如何在只允许执行 stdio 的环境中运行可执行文件?

我考虑过从 Visual Studio 标准设置中删除一些 .lib 和头文件,但恐怕在技术上仍然可以执行 WinAPI 调用。

此外,我可以再创建一个 OS 用户,在管理控制面板中设置一些权限,并从该用户获取 runas 可执行文件以获得“安全”环境,但我不擅长管理,不知道是否可以只给程序 stdio 权限。

最佳答案

由于这类问题将成为各种不同方面的一些相当“糟糕”代码的目标,我建议一种可能的解决方案是使用虚拟机来运行“外部”代码。因此,与其构建在真实硬件上执行操作的服务器软件(并可能搞砸或出于恶意目的接管机器),不如在资源有限且规则严格的虚拟机上运行代码。 “结果”完成后,关闭该 VM,并使用"new"VM(通过克隆先前构建的 VM 创建)重新开始。

是的,删除库和 header 肯定不会阻止某人使用您不想使用的调用/函数。它会让它变得更难一点,但只是一点点。大多数“有害”调用都在系统 win32.dll 中,您还需要它来进行系统 I/O 等操作。

关于c++ - Windows下"Standard I/O only"权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18675739/

相关文章:

c - 为什么我的 Windows 程序试图调用 main() 而不是 WinMain()?

c++ - 用于访问字体表(Kern、GPOS 等)的 Windows API

c - 使用 Windows Api 将字符串写入映射文件

javascript - 是否可以对在浏览器中运行的 JavaScript 进行沙箱处理?

c++ - 将 ifstream 作为参数传递给类构造函数

c++ - 多个列表的高效排列算法

c++ - 从表索引中检索值时哈希表崩溃

c++ - 使用分支优化 CUDA 代码

Linux:是否可以对共享库代码进行沙箱处理

Java 沙箱。使用 SecurityManager 重定向 I/O 访问