当前位置: 首页 > 知识库问答 >
问题:

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

公西英叡
2023-03-14

背景

我正在协助建立一个基于网络的界面来编程简单的AI,它玩游戏和与其他AI竞争。

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

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

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

我遇到了一些问题,其中涉及Java编译的Python代码。也就是说,一个简单的Python脚本(一旦编译成Java),只进行变量赋值,似乎与读写文件的Python类使用相同的类。这意味着我不能(基于所使用的类)判断文件系统是否会被访问。

问题

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

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

共有1个答案

司徒阳曜
2023-03-14

Jython和Python是同一种语言吗?

是的。Jython是用于Java平台的Python语言的实现。Jython 2.5实现了与CPython 2.5相同的语言,以及几乎所有的核心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

 类似资料:
  • 问题内容: 我希望运行一些未经验证的脚本(以尚未确定的语言编写,但是需要基于Java,因此JRuby,Groovy,Jython,BeanShell等都是候选人)。我希望这些脚本能够执行某些操作,并限制执行其他操作。 通常,我只是去使用Java的SecurityManager并完成它。这非常简单,可以让我限制文件和网络访问,关闭JVM的能力等。这对于我想阻止的高级任务非常有用。 但是有些事情我想允

  • Kotlin编译器在这里发出警告(未检查的强制转换): 据我所知,Kotlin smart cast应该知道由检查。 Java代码和编译器给出了完全相同的结果。 为了为每个实现获得正确的util类,我在伴生对象上创建了一个函数,该函数基于泛型类型T的参数为每个实现返回正确的util类,该参数扩展了a:,因此返回类型为。 但是,当我为的每个派生类编写函数体时,使用检查参数的类型,然后使用返回正确的u

  • 问题内容: 背景: 我正在为REST Web服务设计身份验证方案。这并不是“真正”需要安全的(它更多是一个个人项目),但我想使其与练习/学习经验一样安全。我不想使用SSL,因为我不想麻烦,而在大多数情况下,它不需要设置它。 要解决这个问题: S3和OAuth都依赖于对请求URL以及一些选定的标头进行签名。他们都没有在POST或PUT请求的请求主体上签名。这难道不容易受到中间人攻击,这种中间人攻击会

  • 我开发了一个使用SpringXSD有效载荷的网络服务。我需要用SOAPUI实现的SOAP请求头中的用户名和密码来验证请求头 我能够在请求中生成下面的标题 现在我想验证用户名和密码的标题元素。 Ex: 案例1: userName=User and Password=test//身份验证通过并给出响应成功 案例2:userName=User1和Password=test1//身份验证失败,并给出响应失

  • 本文向大家介绍Python是编译运行的验证方法,包括了Python是编译运行的验证方法的使用技巧和注意事项,需要的朋友参考一下 虽然Python被说成是一种解释型语言,但是实际上,Python源程序要先经过编译,然后才能运行。 与Java语言类似,Python源程序编译之后得到的是字节码,交由Python虚拟机来运行。 关于这一点,我们可以这样来验证: 将它保存为program.py,然后在she

  • 通过本任务,将学习如何: 验证Istio双向TLS认证配置 手动测试认证 开始之前 本任务假设已有一个Kubernetes集群: 已根据Istio安装任务安装Istio并支持双向TLS认证。 注意,要在”Installation steps“中的第5步选择”enable Istio mutual TLS Authentication feature”。 验证Istio双向TLS认证配置 以下命令假