是否可以在Java应用程序中限制允许的JRuby命令?

时间:2012-12-14 15:57:44

标签: java security jruby

我在Java应用程序中使用JRuby来允许用户运行他们的脚本。应用程序正常功能所需的操作集并不大。脚本应该控制Java代码中的一些变量,并在执行期间更改进程。

所以我希望有机会限制允许的操作次数。说,我不希望用户有权访问文件系统。

f = File.new("myfile.txt", "w") 
f.puts( "Hello!" ) 
f.close

这应该被禁止。

我该怎么做这样的设置?我唯一的想法是在启动之前解析用户脚本,并将脚本与允许操作的白名单进行比较。

2 个答案:

答案 0 :(得分:4)

您应该做的是创建一个允许命令的白名单。如果发现脚本包含不在白名单中的命令,则需要拒绝整个脚本。 Andrew Thompson指出的安全经理是一个很好的额外层,但它不是安全层的结束。我不认为在沙盒applet中运行真的会给你买那么多,因为你仍然需要确定脚本是否有效。

白名单示例

通常,当您生成白名单时,您希望用户可以选择有限数量的选项/命令,其余选项/命令将被丢弃。您将创建一些枚举或最终数据结构(以最小化其在运行时由恶意程序修改的能力)。如果您希望用户只能选择调用您的函数foo而不是bar,您可以编写类似这样的内容,这完全是原始的,但说明了这一概念:

class WhiteList  
{  
     allowedCommands = ["foo"];  
}  

在你的主要内容中:

class Main  
{  
     for(Command command in userInput)  
     { 
           if(command not in allowedCommands)  
           {  
                log security message;  
                continue/break
           }  
     }  
}  

答案 1 :(得分:1)

为用户代码安装SecurityManager 1 。或者更简单,从沙盒小程序或JWS启动的应用程序运行代码。

  1.   

    安全管理器是一个允许应用程序实现安全策略的类。它允许应用程序在执行可能不安全或敏感的操作之前确定操作是什么以及是否在允许执行操作的安全上下文中尝试操作。应用程序可以允许或禁止操作。