Я пишу своего рода универсальную систему борьбы для решений ACM (таких как TopCoder, Timus и другие). Когда пользователь отправляет свое решение через веб-сервис, мне нужно запустить / скомпилировать его. И я хочу установить для него ограничения, чтобы обеспечить их безопасную работу (нет доступа к внешним файлам, нет возможности получить системное время, невозможно изменить рабочий каталог и т. Д.)
Существует два вида пользовательских решений:
решения, которые могут быть скомпилированы (aka c / c ++ / pascal), а также решения jit-ed и bytecode (c #, java)
интерпретируемые решения (lisp / ruby / python / php)
Система борьбы написана на C # для .NET 3.5. Contester может работать в Linux на Mono и в Windows на .NET.
Какой лучший способ сделать это? Если есть возможность ограничить скомпилированные решения (используя PermissionAttributes), но я не знаю, как ограничить интерпретируемые решения.