我目前正在编写一个自动源代码验证工具。基本上,学生必须上传他们的 C# 源代码文件作为不同任务的解决方案。服务器在框架内编译这些文件,并根据不同的输入文件检查程序。如果程序生成的输出有效(等于预定义的输出),则程序有效,学生将获得该程序的分数。
但我认为我不能信任学生们;)他们可能会尝试获取文件访问权限或在服务器上执行其他不良行为。
我可以采取什么措施将访问限制在最低限度?
我需要考虑什么?
已经考虑过:
- 文件访问
- 最大。执行时间
- 启动其他程序
- 做网络方面的事情
- 反射(reflection)
目前,我能想到的检查代码的唯一方法是使用正则表达式搜索“File”、“Net”、“Process”等关键字。
但我很确定这是非常不安全的。
有什么建议吗?
最佳答案
如果只是出于安全方面的考虑,您应该在沙箱中编译并运行程序。如果您可以使用虚拟机,请考虑使用虚拟机。扫描源代码以查找安全漏洞听起来是一项相当艰巨的任务(坦率地说,如果学生能够在正确输出代码的同时实现漏洞,那么您应该考虑加分:P)
关于c# - 自动编译并运行第三方代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10567689/