标签: javax.script

如何保护使用javax.scripting运行的脚本?

我正在使用javax.scripting添加支持在服务器端运行任意用户上传的JavaScripts.显然我想要保护这些脚本!

Rhino本身就有一个用于在运行时保护脚本的框架.javax.scripting但是,该文档未提及脚本可用的安全性,权限或限制类.那么这只是javax.scriptingAPI中的一个巨大漏洞,它没有提供一个框架来保护它执行的脚本吗?

我不想直接使用Rhino,因为我最初尝试过但是在将Java实例暴露给正在运行的脚本时遇到了一些问题.该javax.scripting框架由它(它使用犀牛罩下)在一个多线程服务器使这个琐碎,并且还简化了运行脚本.

我想列出可在运行脚本中访问/实例化的Java类.有人能指出我如何实现这一目的的示例或文档吗?

javascript security javax.script server-side-scripting

16
推荐指数
1
解决办法
4553
查看次数

尝试使用Rhino,getEngineByName("JavaScript")在OpenJDK 7中返回null

当我运行以下代码时,engine变量设置为null我使用OpenJDK 7(java-7-openjdk-i386)时.

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class TestRhino {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ScriptEngineManager factory = new ScriptEngineManager();
        ScriptEngine engine = factory.getEngineByName("JavaScript");
        try {
            System.out.println(engine.eval("1+1"));
        } catch (ScriptException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

java-6-openjdk与Oracle的运行良好jre1.7.0.知道为什么吗?

我正在使用Ubuntu 11.10.所有JVM都安装在/usr/lib/jvm.

javascript java openjdk rhino javax.script

14
推荐指数
1
解决办法
7446
查看次数

通过脚本引擎(jython)从Java调用Python?

我正在尝试使用以下命令从Java 6应用程序调用Jython javax.script:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class jythonEx
{
    public static void main (String args[]) throws ScriptException
    {
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine pyEngine = mgr.getEngineByName("python");
        try {
            pyEngine.eval("print \"Python - Hello, world!\"");
        } catch (Exception ex) {
            ex.printStackTrace();
        }       
    }
}
Run Code Online (Sandbox Code Playgroud)

这导致NullPointerException:

java.lang.NullPointerException
        at jythonEx.main(jythonEx.java:12)
Run Code Online (Sandbox Code Playgroud)

有谁知道我在这里做错了什么?

编辑:

谢谢你的回复!我将jython.jar添加到类路径中并且运行正常:

java -cp "./;jython.jar" jythonEx
Run Code Online (Sandbox Code Playgroud)

python java jython javax.script

10
推荐指数
1
解决办法
2万
查看次数

javax.script提供的JavaScript中提供的Rhino load()函数?

为Rhino的shell开发的一些JavaScript文件使用load()来加载其他JavaScript文件.我正在尝试使用javax.script从这些Rhino JavaScript文件中嵌入一些功能.不幸的是,javax.script的JavaScript没有实现load()函数.尝试eval()包含load()的脚本时,会发生以下错误:

com.sun.script.javascript.RhinoScriptEngine:-1:in `eval': javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "load" is  not defined.
Run Code Online (Sandbox Code Playgroud)

从Java程序(而不是shell)中评估JavaScript文件时,javax.script是否为load()函数提供了一个?

javascript load rhino javax.script

7
推荐指数
1
解决办法
3460
查看次数

为什么 getEngineByName(“js”) 返回 null?

无论我尝试什么,getEngineByName()总是返回 null。

这是我的代码:

final ScriptEngineManager manager = new ScriptEngineManager();
final ScriptEngine engine = manager.getEngineByName("js");
Run Code Online (Sandbox Code Playgroud)

engine在这些行之后为空。

我也尝试过:

  • getEngineByName("javascript")
  • getEngineByName("nashorn")

他们都回来了null。实际上,manager.getEngineFactories()显示一个空数组 - 意味着根本没有工厂。

这两个答案建议传递null给构造函数,但它对我不起作用:

这个答案说这是一个已修复的错误。


更新:

那是eclipse 中的Android 应用程序项目。

我不知道它与Java Project有何不同。

现在我刚刚打开一个新的Java 项目,写了这些行,我得到了一些结果:

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleBindings;

public class TestClass {

    public static void main(String[] args) throws ScriptException {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = scriptEngineManager.getEngineByName("js"); …
Run Code Online (Sandbox Code Playgroud)

javascript java android javax.script

7
推荐指数
1
解决办法
2万
查看次数

我可以为Java6 Rhino脚本引擎中运行的javascript创建一个"窗口"对象

  • 我想在我的Java6服务器上运行一些Javascript - 即使用javax.script API,特别是Rhino脚本引擎.(虽然可以接受另一种解决方案)
  • 脚本文件由第三方创建和支持,因此我不想下载并编辑它以防它随时间变化.
  • 该脚本直接引用了"窗口"对象(也可能是"文档"对象等),犀牛不似乎支持.

我可以这样做,如果是这样,怎么样?

javascript java javax.script

6
推荐指数
2
解决办法
8017
查看次数

用于Jython的sqlite3模块

我正在使用Java Scripting API从我的Java应用程序执行一些外部Python脚本.python脚本使用sqlite3模块.执行应用程序会导致错误

ImportError: No module named sqlite3
Run Code Online (Sandbox Code Playgroud)

当我查看LibJython 的目录(在类路径中)时,没有sqlite3模块.因此,我的搜索开始,我发现一个_sqlite3.py文件是javasqlite(http://bugs.jython.org/issue1682864)的实现.它的使用产生了更类似的错误.

然后我sqlite3从python的标准库位置搜索了原始python的包(原始目录)并将其放在Jython的Lib文件夹中.然后找不到导入的_sqlite模块_sqlite.so库(实际的C实现).

所以,现在我需要帮助.

python java sqlite jython javax.script

6
推荐指数
1
解决办法
2479
查看次数

我如何在嵌入式JRuby中使用gems-in-a-jar?

我想使用优秀的Sass作为构建过程的一部分.我的构建过程由Gradle管理.这意味着编写一个插件来运行Sass.Sass是Ruby,Gradle是Groovy,但是由于Groovy在JVM上运行,我可以使用JRuby来运行它,使用Java 脚本API.Gradle脚本以jar文件的形式获得依赖关系; 我可以从Maven Central获得JRuby ,但我需要自己将Sass打包成jar.

我试图遵循尼克·西格尔(Nick Sieger)的宝石手套来做这件事,但没有成功.无论我做什么,我都无法让JRuby拿起Sass宝石.

为了隔离这个问题,我写了一个最小的Java(不是Gradle)程序试图通过JRuby使用Sass - 我创造性地称之为JSass:

有两三个有趣的位.第一个是脚本generate-gem-jar.sh,它构建了gem jar:

gem install -i build/gems sass --no-rdoc --no-ri
jar cf lib/gemsass.jar -C build/gems .
Run Code Online (Sandbox Code Playgroud)

第二个是运行JRuby 的so.demo.JSass类:

ScriptEngine rubyEngine = new ScriptEngineManager().getEngineByName("jruby");
ScriptContext context = rubyEngine.getContext();
context.setAttribute("inputFile", inputFile, ScriptContext.ENGINE_SCOPE);
String script = IOUtils.toString(JSass.class.getResourceAsStream("sassdriver.rb"));
rubyEngine.eval(script, context);
Run Code Online (Sandbox Code Playgroud)

第三个是主要类试图用来操作Sass的Ruby脚本:

require 'sass'
template = File.load(inputFile)
sass_engine = Sass::Engine.new(template)
output = sass_engine.render
puts output
Run Code Online (Sandbox Code Playgroud)

该程序能够加载JRuby引擎并执行脚本,但它失败了require 'sass',说:

LoadError: …
Run Code Online (Sandbox Code Playgroud)

rubygems jruby javax.script gems-in-a-jar

6
推荐指数
1
解决办法
4348
查看次数

javax脚本如何从Java调用JavaScript中的函数

我试图通过Java调用JavaScript中的函数.这在直接将脚本作为字符串读取时工作正常,但我正在使用CompiledScripts.

当我使用编译的脚本执行此操作时,如果我还添加了绑定,则会为我提供找不到的方法.没有绑定它可以工作,但当然功能失败,因为它需要绑定.

有任何想法吗?

CompiledScript script = ... get script....

Bindings bindings = script.getEngine().createBindings();

Logger scriptLogger = LogManager.getLogger("TEST_SCRIPT");

bindings.put("log", scriptLogger);

//script.eval(bindings); -- this way fails
script.eval(); // -- this way works
Invocable invocable = (Invocable) script.getEngine();
invocable.invokeFunction(methodName);
Run Code Online (Sandbox Code Playgroud)

TIA

javascript java javax.script

5
推荐指数
1
解决办法
5503
查看次数

在Scripting java(javax.script)中导入一个类

我想将我在项目中创建的类导入到我的脚本中,但是它不起作用:

    function doFunction(){
 //Objectif Mensuel
 importPackage(java.lang);
 importClass(KPDataModel.KPData.KPItem); //ERROR HERE, this is my class that I want to import

 KPItem kpItem = kpItemList.get(0);
 System.out.println(kpItem.CellList.get(2).Value);
 System.out.println("-------");
 var proposedMediationSum = Integer.parseInt(kpItemList.get(0).CellList.get(2).Value);
 var refusedMediationSum = Integer.parseInt(kpItemList.get(0).CellList.get(3).Value)
 var totalMediation = proposedMediationSum + refusedMediationSum;

 kpItemList.get(0).CellList.get(4).Value = totalMediation;

}
Run Code Online (Sandbox Code Playgroud)

java scripting javax.script jdk1.6

5
推荐指数
1
解决办法
1414
查看次数