我有编译Java文件的服务器。如何防止我的服务器从坏Java文件中。例如,我的服务器不应编译从服务器中删除所有文件的代码。
OS:WindowsJava版本1.8C#
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();
}
我认为您不能在编译时执行此操作。例如,保证程序无法通过编译时分析删除所有文件的唯一方法是阻止程序删除任何文件。甚至很困难...因为有多种细微的方法可以使用静态分析来检测到可能很难检测到的文件。
您最好使用Java SecurityManager
在运行时执行限制。安全管理器/沙盒方法(如果正确实施)将允许您允许程序读取/写入/删除某些文件,而不是其他文件。
更好。运行在虚拟机,Chroot监狱或使用(例如)Selinux实现的类似内容中运行用户代码的JVM。这样做,以便如果用户确实设法颠覆了您的防御,则不会造成任何不可逆转的损害。
甚至更好...不要提供(有效)匿名人士可以运行Java代码的服务。(为什么您要想要为自己解决这种问题?)