我正在考虑创建一个使用更受限制的 Java 版本的游戏内代码 IDE,例如我不希望它使用 I/O 流 API。这甚至可能吗?
此外,inb4 this。它仍然无助于限制能力,只有愚蠢/邪恶的学生XD。
我正在考虑创建一个使用更受限制的 Java 版本的游戏内代码 IDE,例如我不希望它使用 I/O 流 API。这甚至可能吗?
此外,inb4 this。它仍然无助于限制能力,只有愚蠢/邪恶的学生XD。
您可以自定义您的java.policy。您可以在此处设置可在 Java 应用程序中使用的类。如果您的学生使用策略中不存在的课程,则会引发安全异常。
限制编译器是一种可能性——但可能不是最简单的一种。您可以尝试使用-bootclasspath
选项调用编译器,提供 JRE 的 rt.jar 的精简版本。然后使用禁止的类(或实际上:使用未包含在受限 jar 文件中的类)将产生编译器错误。
使用运行时安全管理器并仅向学生代码授予受限权限是一个更好的主意。只给学生的班级他们真正需要的权限(这很可能几乎没有,取决于要解决的任务),他们将无法做任何恶意的事情,同时仍然能够使用大部分标准 API,只要它不与外部系统交互。
当然,这仍然不会阻止死循环,这实际上是不可能的。
取决于您所说的“不使用”是什么意思。如果不允许在该 IDE 中编写的代码访问流 API(而不是 IDE 本身),您始终可以提供自己的类加载器,它可以限制对类或整个包的访问。