Онлайн компилятор Java
У меня есть сервер, который компилирует файлы Java. Как я могу предотвратить мой сервер от плохих файлов Java. Например, мой сервер не должен компилировать код, который удаляет все файлы с сервера.
ОС: Windows Java версии 1.8 C#
runner = new Process
{
StartInfo =
{
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
FileName = JavaCompiler.PATH_TO_COMPILER,
Arguments = " -cp " + pathToFile + " Main",
CreateNoWindow = true,
WorkingDirectory = pathToFile
}
};
runner.Start();
Этот код будет выполнять Java-программу.
Моя цель состоит в том, чтобы предотвратить мою программу от таких кодов
File f = new File("c:\\");
String[]entries = index.list();
for(String s: entries){
File currentFile = new File(index.getPath(),s);
currentFile.delete();
}
1 ответ
Я не думаю, что вы можете сделать это во время компиляции. Например, единственный способ гарантировать, что программа не может удалить все файлы с помощью анализа во время компиляции, состоит в том, чтобы остановить программу от удаления любого файла. И даже это сложно... потому что существуют различные тонкие способы удаления файлов, которые трудно обнаружить с помощью статического анализа.
Вы бы лучше использовать Java SecurityManager
применять ограничения во время выполнения. Подход менеджера безопасности / песочницы (если реализован правильно) позволит вам разрешить программе читать / записывать / удалять одни файлы, а другие - нет.
Еще лучше. Запустите JVM, которая запускает код пользователя на виртуальной машине, в изолированной тюрьме или в чем-то подобном, реализованном с помощью, скажем, SELinux. Сделайте так, чтобы, если пользователь сумел подорвать вашу защиту, он не нанес бы необратимого ущерба.
Или даже лучше... не предлагайте услугу, где (эффективно) анонимные люди могут запускать код Java. (Почему вы хотите создать такую проблему для себя?)