繁体   English   中英

验证从Jython编译的Java类的安全性

[英]Verify safety of Java classes compiled from Jython

背景

我正在协助构建基于Web的界面,以对简单的AI进行编程,从而可以玩游戏并与其他AI竞争。

系统的主要要求之一是验证用户提交的代码可以在服务器上安全运行。 也就是说,如果提交的代码访问文件系统,我们需要拒绝提交。

当前,该系统使用Java作为提交语言运行,并执行字节码分析以对照白名单检查提交的代码使用的类。 如果提交使用不允许的类,则提交被拒绝。

我目前正在探索支持使用Python提交的选项,这些选项(使用Jython库)被转换为可在现有系统上运行的Java类。

我遇到了一些问题,其中涉及Java编译的Python代码。 即,一个简单的Python脚本(一旦编译为Java),仅执行变量分配,似乎使用与读取和写入文件的Python类相同的类。 这意味着我无法(基于使用的类)判断是否将访问文件系统。

问题

使用Jython库将Python代码编译为Java对象是否只是将代码包装到一个调用Python解释器并执行Python代码的类中? (如果是这样,字节码分析将不能解决上述问题)。

如果Jython库确实创建了一个真正的Java对象,该对象在运行时不会调用Python解释器,那么我如何分析该对象是否正在尝试访问文件系统?

Jython和Python是同一种语言吗?

是。 Jython是Java平台的Python语言的实现。 Jython 2.5实现与CPython 2.5相同的语言,以及几乎所有的Core Python标准库模块。 (CPython是Python语言的C实现。)Jython 2.5使用与CPython相同的回归测试套件,但做了一些小的修改。

https://wiki.python.org/jython/JythonFaq/GeneralInfo

因此,无需担心调用外部python解释器。

要解决代码检查方面的问题,您可以尝试以下方法: http://blog.datenwerke.net/p/the-java-sandbox.html文档提供了有关如何使用它的良好示例http://blog.datenwerke.net/p /java-sandbox-03-documentation.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM