Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 限制对JRuby脚本中Java类的访问_Security_Jruby - Fatal编程技术网

Security 限制对JRuby脚本中Java类的访问

Security 限制对JRuby脚本中Java类的访问,security,jruby,Security,Jruby,我想允许客户端在JRuby中编写脚本并在web服务器上运行它们。有没有办法禁用java jruby集成。或者至少是一种禁用对ceratain类访问的方法?您是否允许用户提交文件并让服务器以脚本的形式执行?出于几个原因,这可能是一个非常糟糕的主意。首先,他们在Java中可以做什么,你不希望他们做什么,而在普通ruby中做不到什么 话虽如此,确保脚本中没有require'java',这将阻止java集成。查看接口。有了它,您可以实现一个自定义版本,该版本不允许加载某些文件或类。正如上面的评论所建议的

我想允许客户端在JRuby中编写脚本并在web服务器上运行它们。有没有办法禁用java jruby集成。或者至少是一种禁用对ceratain类访问的方法?

您是否允许用户提交文件并让服务器以脚本的形式执行?出于几个原因,这可能是一个非常糟糕的主意。首先,他们在Java中可以做什么,你不希望他们做什么,而在普通ruby中做不到什么

话虽如此,确保脚本中没有
require'java'
,这将阻止java集成。

查看接口。有了它,您可以实现一个自定义版本,该版本不允许加载某些文件或类。正如上面的评论所建议的,不允许加载“java”应该足以禁用java集成


在初始化运行时之前,可以使用
org.jruby.RubyInstanceConfig#setProfile
设置运行时配置文件。如果您使用的是
org.jruby.embed
API,那么请使用
org.jruby.embed.ScriptingContainer#setProfile

我可以想象他们可能会以某种方式访问DB通信层并弄乱我的数据。我已经测试了require'java',结果表明,实例化任何java类都不需要它。导入'abc.dbc.def.SomeClass'就足够了。您可以检查您的shell环境变量RUBYOPTS和JRUBY_OPTS吗。如果我尝试
s=java.lang.String
而不先执行
require'java'
,我会得到一个名称错误哦,是的,我忘了提到JRuby嵌入到我的java应用程序中,所以我可能会使用独立安装的不同配置初始化所有内容。当然,用户提交的脚本与整个webapp在同一个JVM中执行。