我正在编写一些测试软件,它接收一些源代码,在服务器上编译,执行它,从数据库转发输入,捕获输出并将其与数据库中的一个进行比较以查看它是否正确。问题是源代码可以是任何东西(它用c / c ++编写并用visual studio cl编译),所以我需要防止恶意用户。如果它们运行的时间超过一段时间,或者使用的内存超过允许的数量,我会自动终止这些进程。
问题是,我是否只允许这些进程仅从标准输入/输出流中进行写入和读取,并拒绝在Windows上进行任何其他访问权限。
请原谅我的英语。
提前谢谢。
答案 0 :(得分:1)
可能工作对象可以为您提供帮助(请参阅http://msdn.microsoft.com/en-us/library/ms684161(VS.85).aspx)。这个非常强大的功能并不为人所知。
使用工作非常容易。您可以创建一个CreateJobObject
的作业,并设置许多不同的限制,如时间,内存和一些限制。然后,您可以使用挂起标志创建进程,为进程分配进程并恢复进程。然后,您将在创建的进程和所有进程可以创建的子进程树之间获得完全控制权。自Windows 2000起就存在作业功能。
另一种现代方式是用户界面权限隔离(UIPI)(请参阅http://msdn.microsoft.com/en-us/library/bb625963.aspx)或Vista引入的低完整性流程使用方法。请参阅http://msdn.microsoft.com/en-us/library/Bb250462#dse_stlip如何创建低完整性的流程。