我有编译java文件的服务器。如何防止我的服务器出现错误的java文件。例如,我的服务器不应该编译从服务器删除所有文件的代码。
Os:窗户 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();
}
答案 0 :(得分:3)
我认为你不能在编译时这样做。例如,保证程序无法通过编译时分析删除所有文件的唯一方法是阻止程序删除任何文件。即使这很难......因为有很多微妙的方法可以删除使用静态分析难以检测的文件。
最好使用Java ((AssemblyTitleAttribute)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(AssemblyTitleAttribute), false)).Title;
在运行时强制执行限制。安全管理器/沙箱方法(如果正确实现)允许您允许程序读取/写入/删除某些文件,而不允许其他文件。
更好。运行在虚拟机中运行用户代码的JVM,chroot jail或使用(比如)SELinux实现的类似代码。如果用户确实设法破坏了你的防御,它们就不会造成任何不可逆转的伤害。
甚至更好......不提供服务(有效)匿名人员可以运行Java代码。 (为什么你希望为自己制造这类问题?)