我期待运行一些未验证脚本(写在一个尚未将要确定的语言,但必须是基于Java的,所以的JRuby,Groovy的是,Jython,BeanShell的,等都是候选人)。我想这些脚本能够做一些事情和做其他事情的限制。

通常情况下,我只是去使用Java的安全管理器,并用它做。这是相当简单的,让我限制文件和网络访问的能力来关闭JVM,等等。这将很好地工作在高层次的东西,我想挡掉。

但是有一些东西我想允许的,但只能通过我的自定义API /库,我已经提供。举例来说,我不希望允许直接访问网络来开辟一个URLConnection到yahoo.com,但我确定,如果它与MyURLConnection完成。这就是 - 有一组方法/类的,我想允许,然后一切我想成为禁区

我不相信这种类型的安全可以使用标准的Java安全模型来完成,但也许可以。我没有在脚本语言本身的性能或灵活性的特定需求(脚本将是我的基本循环API简单过程调用/分支)。因此,即使“大”开销在每个反射调用检查安全检查是我的罚款。

建议?

有帮助吗?

解决方案

免责声明:我不是Java的安全API的专家,所以有可能是一个更好的方式来做到这一点。

我的露天的,基于Java的开源企业网站管理系统工作,我们实施了类似的东西你描述。我们希望允许脚本,但仅限于我们的Java API的一个子集到脚本引擎。

我们选择犀牛引擎JavaScript脚本。它允许你控制哪些API暴露给JavaScript,这使我们能够选择哪些类是可用的,哪些不是。开销,根据我们的工程师,为10%左右 - 不算太糟糕。

除此之外,这可能是与你有关的,以及,在Java方面,我们使用Acegi(现在的Spring Security),并使用AOP给基于角色的控制,其方法有一定的用户可以调用。这非常有效授权。因此,实际上,访问通过JavaScript我们的应用程序,用户首先必须在第一时间向他提供受限制的API,然后该API可以根据授权进行进一步限制。所以,你可以使用AOP技术,以进一步限制哪些方法可以调用,从而允许在其他脚本语言,比如Groovy,等我们在添加这些过程也暴露这一点,有信心,我们的基本的Java API的保护用户免受未经授权的访问。

其他提示

您可能能够使用自定义的类装载器,做兽医链接到类委托给其父前。

您可以创建自己的权限,检查这些在安全敏感的API,然后使用AccessController.doPrivileged恢复相应的权限,同时调用底层API。

您需要确保脚本引擎本身是安全的。犀牛在Sun JDK版本应该没问题,但不能保证。显然,你需要确保一切可用的脚本是安全的。

在Groovy中,你可以做你提到什么。其实很简单。您可以轻松地限制在受信任的环境中运行不信任脚本的权限,让自己的API,这反过来又可以做的事情不可信的使用。

http://www.chrismoos.com / 2010/04/24 /常规的脚本和 - JVM安全/

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top