限制 Java 编译器 API



我正在考虑创建一个使用更受限制的Java版本的游戏内代码IDE,例如,我不希望它使用I/O流API。这可能吗?

另外,inb4 这个。它仍然无助于限制能力,只有愚蠢/邪恶的学生XD。

您可以自定义 java.policy。您可以在此处设置可在 Java 应用程序中使用的类。如果学生使用策略中不存在的课程,则会引发安全异常。

限制编译器是一种可能性 - 但可能不是最简单的一种。您可以尝试使用 -bootclasspath 选项调用编译器,提供 JRE 的 rt.jar 的精简版本。然后使用禁止的类(或者实际上:使用未包含在受限 jar 文件中的类)将给出编译器错误。

使用运行时安全管理器并仅向学生代码授予受限权限是一个更好的主意。只给学生的班级他们实际需要的权限(这很可能几乎没有,取决于要解决的任务),他们将无法做任何恶意的事情,同时仍然能够使用大多数标准API,只要它不与外部系统接口。

当然,这仍然无法阻止无休止的循环,这实际上是不可能的。

有点取决于你所说的"不使用"是什么意思。如果不允许在该 IDE 中编写的代码访问流 API(而不是 IDE 本身),则始终可以提供自己的类加载器,该类加载器可以限制对类或整个包的访问。

最新更新