我想设置一个 online judge (自动测试软件;采用潜在的恶意代码并对其运行一些测试)在 Windows 上,但此类软件通常是为 *nix 系统编写的,因为在那里沙盒代码更容易。目前看来我必须自己编写。
- 如何以一种方式编译 C++ 代码以防止除 stdin/stdout 之外的任何行为?
- 如何在只允许执行 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/