我的问题,类似于
why java security manager doesn't forbid neither creating new Thread() nor starting it?
我正在编写一个教学应用程序,允许学生提交执行特定任务的java代码,并进行交互。
我们需要安全地加载、编译和执行一些代码。
使用Java工具,我们可以在内存中完成所有代码的编译;然后,自定义类加载器加载代码,代码在线程中执行,并具有一定的超时和自定义安全管理器。
然而,学生仍然可以在他们的代码中创建线程,在循环中设置它们,最终耗尽系统/Tomcat资源。
有没有办法防止创建线程?引述的答案是:
"""From your perspective, just change the policy."""这在实践中意味着什么?
我尝试覆盖方法checkPermission(Permission)和checkAccess(ThreadGroup),但仍然无法拦截线程创建/启动
发布于 2015-06-25 10:06:01
您引用的other question的可接受答案不正确。为了防止代码创建新线程,您需要将标准Java子类化为SecurityManager,并覆盖getThreadGroup或checkAccess(ThreadGroup)。我已经发布了另一个问题的答案和详细信息。
发布于 2014-03-06 12:08:52
看起来你想要做的是创建另一个JVM (例如java进程),如果事情失控,它可能会被批量终止。你有什么理由不这么做吗?
您还可以将自己的jar添加到新JVM的类路径中,并使用您的JAR作为入口点。这样,您就可以在可疑代码运行之前设置自定义安全管理器之类的东西。您还可以在权限受限的帐户下运行JVM,以防止恶意系统交互。
https://stackoverflow.com/questions/22214684
复制相似问题