1
106
JSR 121: Application Isolation API Specification 是为解决这个问题而设计的,但不幸的是,它还没有实现。 这是一个非常详细的话题,我大部分时间都在写这篇文章。 但不管怎样,有些不完美的代码,可能是错误的(伪)代码: 类装载器
安全管理器
螺纹
|
2
18
显然,这样的计划引发了各种各样的安全问题。Java具有严格的安全框架,但它不是微不足道的。把它搞砸,让一个没有特权的用户访问重要的系统组件的可能性不容忽视。 除此之外,如果您以源代码的形式使用用户输入,您需要做的第一件事就是将其编译为Java字节码。afiak,这不能在本地完成,所以您需要对javac进行系统调用,并将源代码编译为磁盘上的字节码。 Here's 一个可以作为起点的教程。 编辑 正如我在评论中所学到的,你实际上可以从源头上编译源代码。 javax.tools.JavaCompiler 一旦拥有了JVM字节码,就可以使用 ClassLoader's defineClass 功能。要为此加载的类设置安全上下文,需要指定 ProtectionDomain . 的最小构造函数 保护域 同时需要代码源和 PermissionCollection . PermissionCollection是这里您主要使用的对象-您可以使用它来指定加载类具有的确切权限。这些权限最终应该由JVM执行 AccessController . 这里有很多可能的错误点,在实现任何东西之前,您应该非常小心地完全理解每件事情。 |
3
10
这个 Java-Sandbox 是一个用有限的权限集执行Java代码的库。 它可以用来只允许访问一组白名单中的类和资源。似乎没有 能够限制对单个方法的访问。它使用带有自定义类加载器的系统,并且 安全管理器来实现这一点。 我没有使用过它,但它看起来设计得很好,文档也很好。 @Waqas给出了一个非常有趣的答案,解释了这是如何实现自己的。但是,将这样的安全关键和复杂的代码留给专家更安全。 请注意,虽然该项目自2013年以来没有更新,但创建者将其描述为“实验性的”。它的主页已经消失,但源代码伪造条目仍然存在。 改编自项目网站的示例代码:
|
4
4
好吧,给出任何建议或解决方案都为时已晚,但我仍然面临类似的问题,更注重研究。基本上,我试图为电子学习平台中的Java课程提供编程和自动评价。
我知道这听起来是一个相当复杂的任务,但是Oracle虚拟箱已经提供了Java API来动态地创建或克隆虚拟机。 https://www.virtualbox.org/sdkref/index.html (注意,即使是VMware也提供了这样做的API) 对于Linux发行版的最小规模和配置,您可以在这里参考这个版本。 http://www.slitaz.org/en/ , 所以现在如果学生搞砸了或者试图这样做,可能是用内存或者文件系统或者网络,插座,最大限度地他可以损坏自己的虚拟机。 此外,在这些VM内部,您可以提供额外的安全性,比如Java的沙箱(安全管理器)或在Linux上创建用户特定帐户,从而限制访问。 希望这有帮助!! |
5
2
下面是一个线程安全的问题解决方案:
请评论! 铜 阿诺 |
6
2
解决公认答案中的问题
|
7
0
您可能需要使用自定义 SecurityManger 和/或 AccessController . 有关详细信息,请参见 Java Security Architecture 和 other security documentation 来自太阳。 |
clorisanderton · 可能的Git扩展 6 年前 |
GeorgeK · Nativescript联系人列表插件 6 年前 |
Kazora · 我在插口插件中的命令不起作用 6 年前 |
E235 · 如何搜索Docker插件 6 年前 |